Селен кликнете на врската според вредноста на href

Во Селениум веб-возач, постојат голем број начини на кои можеме да комуницираме со веб-елементи, како што се ID на елемент, XPath, CSS, итн.

Може да кликнеме и на врски со linkText или partialLinkText. Овие методи се добри ако го знаеме очекуваниот текст помеѓу ознаки.

Меѓутоа, кога правиме тестирање за локализација или интернационализација, текстот се преведува соодветно и веќе не сме во можност да користиме linkText или partialLinkText, особено ако сидро-ознаките не содржат никаков ID или класа.


Да претпоставиме дека сакаме да кликнеме на врската што покажува на profile.html,

на пр.


View Profile

Како што споменавме порано, можеме да користиме

driver.findElement(By.linkText('View Profile')).click()

и тоа ќе работи, сè додека сме на страница со англиски јазик.

На пример, кога ќе го смениме јазикот на германски, сега се прикажува нашата врска

Profil ansehen

Сега, линијата


driver.findElement(By.linkText('View Profile')).click()

би пропаднал бидејќи нема врска на страницата на профилот со тој текст.

Еден начин да се надмине ова е да кликнете на врската според нејзините href вредност, бидејќи дури и кога јазикот на страницата се менува, врската href сепак треба да укажува на истата локација.

Со други зборови, интернационализацијата не треба да влијае на грижата за врските.

WebDriver нема самостоен и директен начин на кликнување на врската според вредноста на href. Наместо тоа, треба да ги добиеме сите врски на страницата, да го извлечеме атрибутот 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;
}
} }

Понатамошно читање: