web-dev-qa-db-fra.com

Comment cliquer sur un lien dont href a une certaine sous-chaîne dans Selenium?

Ce qui suit est un tas de liens <a elements.UNIQUEMENT un} d'entre eux a une sous-chaîne "long" comme valeur pour l'attribut href

<a class="c1" href= "very_lpng string" > name1 </a>
<a class="g2" href= "verylong string" > name2 </a>   // The one that I need
<a class="g4" href= "very ling string" > name3 </a>
<a class="g5g" href= "very ng string" > name4 </a>

...................

J'ai besoin de cliquer sur le lien dont la variable href contient une chaîne "longue". Comment puis-je faire ceci?

PS: driver.findElement(By.partialLinkText("long")).click(); // b/c il choisit par le nom

44
Buras

Je dois cliquer sur le lien qui a href a une sous-chaîne "long". Comment puis-je faire ceci?

Avec la beauté des sélecteurs CSS.

votre déclaration serait ...

driver.findElement(By.cssSelector("a[href*='long']")).click();

Cela signifie, en anglais,

Trouvez-moi des éléments 'a' ayant l'attribut href et cet attribut contains 'long'

Vous pouvez trouver un article utile sur la formulation efficace de vos propres sélecteurs, ainsi qu'une liste de tous les autres opérateurs d'égalité. contains, starts with, etc ... Vous pouvez le trouver à: http://ddavison.io/css/2014/02/18/effective-css-selectors.html

92
sircapsalot

utiliser driver.findElement(By.partialLinkText("long")).click();

6
rt2800

Tu peux le faire:

//first get all the <a> elements
List<WebElement> linkList=driver.findElements(By.tagName("a"));

//now traverse over the list and check
for(int i=0 ; i<linkList.size() ; i++)
{
    if(linkList.get(i).getAttribute("href").contains("long"))
    {
        linkList.get(i).click();
        break;
    }
}

dans ce que nous faisons, c’est d’abord que nous trouvons toutes les balises <a> et que nous les stockons dans un list.After que nous itérons la liste une par une pour trouver la balise <a> dont l’attribut href contient une longue chaîne. Et puis nous cliquons sur cette balise <a> et sortons de la boucle.

4
Praveen

Avec l'aide de xpath locator, vous pouvez également atteindre le même objectif.

Votre déclaration serait:

driver.findElement(By.xpath(".//a[contains(@href,'long')]")).click();

Et pour cliquer sur tous les liens contenus longtemps dans l'URL, vous pouvez utiliser: - 

List<WebElement> linksList = driver.findElements(By.xpath(".//a[contains(@href,'long')]"));

for (WebElement webElement : linksList){
         webElement.click();
}
0
Nitish Kumar