В 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 с това, което очакваме.
Да предположим, че имаме следните връзки и искаме да кликнете върху връзката в профила
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;
}
} }
Допълнителна информация: