„Selenium WebDriver“ yra daugybė būdų, kaip galime sąveikauti su žiniatinklio elementais, pvz., Pagal elemento ID, XPath, CSS ir kt.
Taip pat galime spustelėti nuorodas linkText
arba partialLinkText
. Šie metodai yra geri, jei žinome laukiamą tekstą tarp
žymos.
Tačiau kai atliekame lokalizavimo ar internacionalizavimo bandymus, tekstas yra atitinkamai išverstas ir mes nebegalime naudoti „linkText“ ar „semiLinkText“, ypač jei inkaro žymose nėra jokio ID ar klasės.
Tarkime, kad norime spustelėti nuorodą, nukreipiančią į profile.html
,
pvz.
View Profile
Kaip minėta anksčiau, mes galime naudoti
driver.findElement(By.linkText('View Profile')).click()
ir tai veiks, jei tik būsime puslapyje su anglų kalba.
Pavyzdžiui, pakeitus kalbą į vokiečių kalbą, dabar rodoma mūsų nuoroda
Profil ansehen
Dabar eilutė
driver.findElement(By.linkText('View Profile')).click()
nepavyktų, nes profilio puslapyje nėra nuorodos su tuo tekstu.
Vienas iš būdų tai įveikti yra spustelėti nuorodą pagal jos href
vertė, nes net ir keičiant svetainės kalbą „href“ nuoroda vis tiek turėtų būti nukreipta į tą pačią vietą.
Kitaip tariant, internacionalizacija neturėtų paveikti nuorodų.
„WebDriver“ neturi atskiro ir tiesioginio būdo spustelėti nuorodą pagal „href“ vertę. Vietoj to, turime gauti visas puslapio nuorodas, išskleisti „href“ atributą ir tada palyginti „href“ reikšmes su tikėtinomis.
Tarkime, kad turime šias nuorodas ir norime spustelėti profilio nuorodą
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 galime naudoti clickLinkByHref('Profile')
tada aukščiau minėta funkcija gaus visas puslapio nuorodas ir jas kartos, o radusi nuorodą, kurioje yra profilis, „WebDriver“ spustelės nuorodą.
Atkreipkite dėmesį, jei juose yra kelios nuorodos su žodžio profiliu, aukščiau nurodyta funkcija visada spustelės pirmąją nuorodą, kurioje yra žodžio profilis. Mes galime pakeisti pirmiau pateiktą kodą, kad įtrauktume, kurią iš nuorodų norime spustelėti:
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;
}
} }
Papildoma literatūra: