Est par.id de mieux que de par.tagname?
Je travaillais sur la lecture des mails de gmail à l'aide de webdriver et entre les deux, je suis tombé sur cette différence entre Par.id et Par.tagname.
Je suis en train d'essayer d'obtenir l'accès à une "table" dont l'id est: "pg". J'ai donc pu
- Soit utiliser Par.id":pg")
- OU de l'utilisation Par.tagname("table") et de rechercher un élément avec l'id :pg
Voici le code pour les deux cas.
Par.id:
WebDriver webDriver = new FirefoxDriver();
webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
webDriver = webDriver.switchTo().frame("canvas_frame");
WebElement table1 = webDriver.findElement(By.id(":pg"));`
Code ci-dessus, j'ai directement pour obtenir l'élément qui a l'id ":pg"
Par.tag:
WebDriver webDriver = new FirefoxDriver();
webDriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
List<WebElement> tables = webDriver.findElements(By.tagName("table"));
for(WebElement table2: tables){
String id = table2.getAttribute("id");
System.out.println("id: "+ id);
if(id != null && id.equals(":pg")){
System.out.println("FOUND IT!!!");
}
}
Code ci-dessus, je trouve tous les éléments avec le tag de la table, puis de voir celui qui a l'id ":pg".
Ces deux extraits de code sont essentiellement de faire la même chose mais à l'aide de différents moyens(Par.id ou Par.tagname). Toutefois, le premier extrait de code qui utilise Par.id réussit toujours, tandis que la deuxième extrait de code qui utilise Par.tagname échoue presque toujours. (Il va travailler avec d'autres en attente cependant)
Pourquoi cette différence est-elle entre Par.id et Par.tagname?
Grâce,
Chris.
Vous devez vous connecter pour publier un commentaire.
La
:pg
élément n'est pas présent sur la page initialement.À l'aide de
By.Tag
, le sélénium n'attendra pas la:pg
élément.Parce que
By.Id
exemple est plus spécifique, le sélénium permettra de continuer à vérifier si le:pg
élément n'existe jusqu'à ce que l'implicite d'attente (5 secondes) temps de sortir.Par.La balise n'est pas spécifique à tous. Sur
findElements(By.tagName("table")
, le Sélénium retournera un tableau de toutes les tables qui sont présents immédiatement après le chargement de la page. Comme le:pg
élément n'est pas présent encore, il ne sera pas dans le tableau.Pour répondre à votre question, oui il est préférable d'utiliser
By.Id
parce que:1. Il est plus spécifique.
2. Enregistre les lignes de code
3. Les Forces de sélénium à attendre pour l'élément d'exister.
Il est préférable d'utiliser Par.Id en fonction de votre question.
Par.la balise n'est pas utilisé pour des données spécifiques, il fait recherche et retourne un tableau de toutes les tables avec le nom de la balise, donc à l'aide de l'id, vous pouvez obtenir la sortie appropriée pour le moment.
Aller pour la balise seulement si id ya de classe n'est pas spécifié et que la meilleure façon peut être Par.cssSelector si aucun élément n'est trouvé.
Grâce