Подтвердить что ты не робот

Как щелкнуть ссылку, чья href имеет определенную подстроку в Selenium?

Ниже приведена цепочка ссылок <a elements. ТОЛЬКО одна из них имеет подстроку "long" в качестве значения для атрибута 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>

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

Мне нужно щелкнуть ссылку, у которой href есть подстрока "long" в ней. Как я могу это сделать?

PS: driver.findElement(By.partialLinkText("long")).click();//b/c он выбирает по имени

4b9b3361

Ответ 1

Мне нужно щелкнуть ссылку, у которой href имеет подстроку "long" в ней. Как я могу это сделать?

С красотой селекторов CSS.

ваше выражение будет...

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

Это означает, что на английском языке

Найдите мне любые 'a' элементы, которые имеют атрибут href, и этот атрибут contains 'long'

Вы можете найти полезную статью о том, как эффективно создавать собственные селекторы для автоматизации, а также список всех других операторов равенства. contains, starts with и т.д. Вы можете найти это: http://ddavison.io/css/2014/02/18/effective-css-selectors.html

Ответ 2

использовать driver.findElement(By.partialLinkText("long")).click();

Ответ 3

Вы можете сделать это:

//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;
    }
}

в этом, что мы делаем, сначала мы находим все теги <a> и сохраняем их в list.After, которые мы итерируем список один за другим, чтобы найти тег <a>, чей атрибут href содержит длинную строку. Затем мы нажимаем на этот тег <a> и выходим из цикла.