Follwing est le code HTML:

<div class="search-nav">
    <div class="field">
        <input id="search" type="text" class="input-data" 
                placeholder="Enter Claim or Payment Number..." 
                name="QuickSearch">
        </input>
    </div>
    <button class="search-button" data-ng-click="performSearch($event)"> 
    <i class="search icon"></i></button>
</div>

Code sélénium Python:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='field' and @id='search']"))).send_keys("12343545")
0
Dimple Mathew 17 avril 2018 à 09:55

4 réponses

Meilleure réponse

Je pense qu'il y a un frame là-bas, vous passez d'abord au cadre puis localisez l'élément

//Switch to frame    
driver.switch_to.frame(driver.find_element_by_id("Id of your Frame")) 

waitElem = WebDriverWait(driver, 10)
element = waitElem .until(EC.element_to_be_clickable((By.ID, 'search'))) 

element.send_keys("323232")

Veuillez placer votre localisateur de cadre à la place de "Id de votre cadre"

1
iamsankalp89 17 avril 2018 à 07:31

Actuellement, votre Xpath ne fait référence à rien car il n'y a pas d'élément Web avec l'identifiant et la classe auxquels vous faites référence.

'AND' ne peut être utilisé dans xpath que sur deux attributs présents dans la même balise. Par exemple: // entrée [@ id = 'search' AND name = 'QuickSearch']

Donc, mettez à jour votre xpath comme:

// entrez [@ id = 'search'] OU // entrez [@ id = 'search' AND @ name = 'QuickSearch']

0
Ramdeep Singh 17 avril 2018 à 08:12

La raison pour laquelle vous ne pouvez pas passer de texte est que vous recherchez un élément où class = 'field' et id = 'search'. Avec cela, vous faites référence à 2 éléments différents. class = 'field' est un <div> et et id = 'search' est un <input>

Ce que vous voulez faire, c'est envoyer du texte à l'entrée uniquement. Maintenant, si vous voulez l'envoyer à cette entrée spécifique sous le div avec class = 'field', essayez ce qui suit:

//div[@class='field']/input[@id='search']"))).send_keys("12343545")

Ou si c'est le seul champ de saisie avec l'ID "recherche".

//input[@id='search' and @class='input-data']
0
Anand 17 avril 2018 à 07:17

Si le champ de saisie est dans iframe, vous devez basculer le contrôle du pilote Web sur cet iframe particulier pour effectuer des opérations à l'intérieur:

Code

driver.switch_to.frame(driver.find_element_by_id("payspan-health"))  
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, 'search')))
driver.find_element_by_id('search').send_keys("12343545")

#To switch back to the main window, you can use
driver.switch_to.default_content()
0
cruisepandey 17 avril 2018 à 07:37