0
votes

SELENIUM WEBDRIVER: ne peut pas trouver l'élément par nom de classeName

Je suis actuellement en difficulté avec le sélénium pour sélectionner un élément par son nom de classe. Le site Web que j'utilise est la suivante:

<span>
      <label class="first_name_label form_label_text"></label>
                <div class="clear"></div>
                <div class="form-item icon">
                  <input value="" data-error="An error has occured." id="first_name" type="text" name="first_name" class="form_item  is_required" placeholder="First Name">
                  <i style="color:rgba(70,75,106,0.5)" class="vs icon-user"></i>                </div>
                                <div class="form-item icon">
                  <input value="" data-error="An error has occured." id="last_name" type="text" name="last_name" class="form_item  is_required" placeholder="Last Name">
                  <i style="color:rgba(70,75,106,0.5)" class="vs icon-user"></i>                </div>
<div class="clear"></div>
</span>


5 commentaires

Vous ne pouvez pas utiliser de nom de classe composé pour localiser l'élément à l'aide de classname .


HMM merci pour les commentaires. J'ai édité le post. Dans le deuxième exemple, je ne peux pas le sélectionner par ID non plus pour une raison quelconque. Je suis confus.


Il devrait fonctionner avec ID en utilisant une attente appropriée.


Driver.Manage (). Télèves (). Implicitwait = Timespan.fromseconds (10); En attente de 10 secondes et il n'est toujours pas disponible pour une raison quelconque.


Essayez d'utiliser webDriverwait


3 Réponses :


0
votes

Code corrigé: XPath de votre nom de classe était incorrect.

IWebElement search = driver.FindElement(By.Xpath("//*[@id='email']"));


0 commentaires

1
votes

Vous pouvez utiliser le nom de la classe pour trouver également l'élément, mais quel est le problème est que même classe peut être utilisé pour définir plusieurs éléments dans le programme, donc lorsque vous trouvez l'élément par classe Il sera ne pas assurer vous qu'il trouvera l'élément que vous espérez. Le sélénium trouvera l'élément du premier en résultat.

Mieux vaut avec XPATH comme étiquette avec la classe. Voici le code

xpath = "// entrée [@ nom = 'passwd']";

@ -> peut être utilisé pour obtenir n'importe quel paramètre à l'intérieur de la balise et l'utiliser selon vos besoins.

Cela vous aidera. Contact Pour plus d'informations.


0 commentaires

1
votes

Si vous observerez le nom de la classe de l'élément, il s'agit du nom de la classe composée (avoir de l'espace entre). Et les noms de classe composés ne sont pas autorisés dans le sélénium. Dans ce cas, vous pouvez utiliser un autre localisateur comme CSS (avec nom de classe) ou XPath.

Vérifiez l'extrait de code suivant: P>

WebDriverManager.chromedriver().version("2.40").setup();
WebDriver driver= new ChromeDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver.get("http://demo.guru99.com/test/login.html");
WebElementuserName=driver.findElement(By.cssSelector(".is_required.validate.account_input.form-control"));
userName.sendKeys("Username");
WebElement password = driver.findElement(By.xpath("(//[@class='is_requiredvalidateaccount_input form-control'])[2]"));
password.sendKeys("Password");


0 commentaires