Klik na vezu selena prema href vrijednosti

U programu Selenium WebDriver postoji nekoliko načina na koje možemo komunicirati s web elementima, poput ID-a elementa, XPath, CSS itd.

Također možemo kliknuti veze prema linkText ili partialLinkText. Ove su metode dobre ako znamo očekivani tekst između oznake.

Međutim, kada vršimo testiranje lokalizacije ili internacionalizacije, tekst se prevodi u skladu s tim i više ne možemo koristiti linkText ili djelomičniLinkText, pogotovo ako oznake sidra ne sadrže nikakav ID ili klasu.

Pretpostavimo da želimo kliknuti vezu koja upućuje na profile.html,

npr.

View Profile

Kao što je ranije spomenuto, možemo koristiti



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

i to će raditi, sve dok smo na stranici s engleskim jezikom.

Kada, na primjer, promijenimo jezik u njemački, sada se prikazuje naša veza

Profil ansehen

E sad, linija

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

ne bi uspio jer na stranici profila s tim tekstom ne postoji veza.

Jedan od načina da se to prevlada jest kliknuti vezu pored href vrijednost, jer čak i kada se jezik stranice promijeni, href veza i dalje treba ukazivati ​​na isto mjesto.

Drugim riječima, internacionalizacija ne bi trebala utjecati na href veza.

WebDriver nema samostalan i izravan način klika na vezu prema njezinoj href vrijednosti. Umjesto toga, trebamo dobiti sve veze na stranici, izvući href atribut i zatim usporediti href vrijednosti s onim što očekujemo.

Kliknite Link by href

Pretpostavimo da imamo sljedeće poveznice i želimo kliknuti vezu na profil

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

Tada možemo koristiti clickLinkByHref('Profile')

a zatim će gornja funkcija dobiti sve poveznice na stranici i prelistati ih, a kad pronađe vezu koja sadrži profil, WebDriver će kliknuti vezu.

Napomena, ako u njima postoji nekoliko veza s profilom riječi, gornja funkcija uvijek će kliknuti prvu vezu koja sadrži profil riječi. Gornji kod možemo izmijeniti tako da uključuje koju vezu želimo kliknuti:

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

Daljnje čitanje: