Націсніце спасылку на селен па значэнні href

У Selenium WebDriver існуе шэраг спосабаў узаемадзеяння з вэб-элементамі, напрыклад, па ідэнтыфікатары элемента, XPath, CSS і г.д ...

Мы таксама можам націскаць спасылкі па linkText альбо partialLinkText. Гэтыя метады добрыя, калі мы ведаем чаканы тэкст паміж тэгі.

Аднак, калі мы праводзім тэсціраванне на лакалізацыю ці інтэрнацыяналізацыю, тэкст перакладаецца адпаведна, і мы больш не можам выкарыстоўваць linkText або partLinkText, асабліва калі прывязачныя тэгі не ўтрымліваюць ніякага ідэнтыфікатара або класа.


Дапусцім, мы хочам націснуць на спасылку, якая ўказвае на profile.html,

напр.


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 з тым, што мы чакаем.




Націсніце Спасылка па 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;
}
} }

Далейшае чытанне: