Selenium WebDriver- ում կան մի շարք եղանակներ, որոնցով մենք կարող ենք փոխազդել վեբ տարրերի հետ, ինչպիսիք են տարրերի 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- ի արժեքները մեր սպասածի հետ:
Ենթադրենք, որ մենք ունենք հետևյալ հղումները և ուզում ենք կտտացնել պրոֆիլի հղմանը
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;
}
} }
Հետագա ընթերցում.