Как щелкнуть ссылку, чья 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 он выбирает по имени
Ответы
Ответ 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>
и выходим из цикла.