В Selenium WebDriver есть несколько способов взаимодействия с веб-элементами, например, с помощью идентификатора элемента, XPath, CSS и т. Д.
Мы также можем переходить по ссылкам с помощью linkText
или partialLinkText
. Эти методы хороши, если мы знаем ожидаемый текст между
теги.
Однако, когда мы проводим тестирование локализации или интернационализации, текст переводится соответствующим образом, и мы больше не можем использовать linkText или partialLinkText, особенно если теги привязки не содержат какого-либо идентификатора или класса.
Предположим, мы хотим щелкнуть ссылку, которая указывает на profile.html
,
например
View Profile
Как упоминалось ранее, мы можем использовать
driver.findElement(By.linkText('View Profile')).click()
и это будет работать, пока мы находимся на странице с английским языком.
Например, когда мы меняем язык на немецкий, наша ссылка теперь отображается
Profil ansehen
Теперь линия
driver.findElement(By.linkText('View Profile')).click()
завершится ошибкой, потому что на странице профиля нет ссылки с таким текстом.
Один из способов решить эту проблему - щелкнуть ссылку по ее href
значение, потому что даже при изменении языка сайта ссылка href должна указывать на то же место.
Другими словами, интернационализация не должна влиять на href ссылок.
WebDriver не имеет автономного и прямого способа щелкнуть ссылку по ее значению href. Вместо этого нам нужно получить все ссылки на странице, извлечь атрибут href, а затем сравнить значения href с ожидаемыми.
Предположим, у нас есть следующие ссылки, и мы хотим нажать на ссылку профиля
View Profile Transactions
public void clickLinkByHref(String href) {
List anchors = driver.findElements(By.tagName('a');
Iterator i = anchors.iterator();
while(i.hasNext()) {
WebElement anchor = i.next();
if(anchor.getAttribute('href').contains(href)) {
anchor.click();
break;
}
} }
Тогда мы можем использовать clickLinkByHref('Profile')
а затем вышеуказанная функция получит все ссылки на странице и перебирает их, и когда она найдет ссылку, содержащую профиль, WebDriver щелкнет ссылку.
Обратите внимание: если у нас есть несколько ссылок со словом «профиль», указанная выше функция всегда будет щелкать по первой ссылке, содержащей слово «профиль». Мы можем изменить приведенный выше код, чтобы указать, какие из ссылок мы хотим щелкнуть:
public void clickLinkByHref(String href, int position) {
List anchors = driver.findElements(By.tagName('a');
Iterator i = anchors.iterator();
int j = 0;
while(i.hasNext()) {
WebElement anchor = i.next();
if(anchor.getAttribute('href').contains(href)) {
j++;
}
if(anchor.getAttribute('href').contains(href)
&& j == position) {
anchor.click();
break;
}
} }
Дальнейшее чтение: