Щракнете върху селен върху връзка по href стойност

В Selenium WebDriver има редица начини, по които можем да взаимодействаме с уеб елементи, като например ID на елемента, XPath, CSS и др ...

Също така можем да щракнем върху връзки от linkText или partialLinkText. Тези методи са добри, ако знаем очаквания текст между тагове.

Когато обаче правим тестване за локализация или интернационализация, текстът се превежда по съответния начин и вече не сме в състояние да използваме linkText или partLinkText, особено ако котвата не съдържа идентификатор или клас.


Да предположим, че искаме да щракнем върху връзка, която сочи към profile.html,

e.g.


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 с това, което очакваме.




Щракнете върху Link By 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;
}
} }

Допълнителна информация: