Как использовать индексный номер с PageFactory.initElement (драйвер, это), чтобы идентифицировать два идентичных элемента из DOM? - PullRequest
0 голосов
/ 26 января 2020

На веб-странице у нас отображаются две ссылки без атрибута, кроме текста ссылки. Я хочу создать класс объекта страницы для страницы.

Здесь возникает вопрос, как я могу указать объявление объекта WebElement в классе объекта страницы, который однозначно идентифицировал второй экземпляр отображаемых ссылок.

<html>
  <a href="a.html">Link</a>
  <a href="a.html">Link</a>
</html>

для вышеупомянутого (просто пример, чтобы понять идею), я хочу получить WebElement объект для второй ссылки, используя PageFactory.initElement(driver, this) выражение

@FindBy(how = How.LINK_TEXT, using = "Link")
public static WebElement link;

Я думаю, что выше будет идентифицировать только первый объект.

Ответы [ 3 ]

1 голос
/ 26 января 2020

Когда вы находите отдельный элемент, селен вернет первый соответствующий элемент в DOM. Вы можете указать индекс, если используете XPATH

@FindBy(how = How.XPATH, using = "//a[.='Link'][2]")
public static WebElement link;

Вы также можете найти все ссылки и использовать индекс в возвращенном списке

@FindBy(how = How.LINK_TEXT, using = "Link")
public static List<WebElement> links;

WebElement link = links.get(1);
0 голосов
/ 26 января 2020

Два элемента с HTML DOM не могут быть идентичными. Они могут отображаться относительно аналогичного набора атрибутов, но их положение в DOM Tree будет различаться.

Предполагается, что узел <html> является непосредственным предком дочернего элемента <a> узлы, чтобы идентифицировать WebElement со второй ссылкой, используя аннотации PageFactory.initElement(driver, this) и FindBy, вы можете использовать любую из следующих Стратегий локатора :

  • cssSelector:

    @FindBy(id = "html a:nth-of-type(2)")
    public static WebElement link;
    
  • xpath:

    @FindBy(how = How.XPATH, using = "//html//following::a[2]")
    public static WebElement link;
    
0 голосов
/ 26 января 2020

Вы можете однозначно идентифицировать второй элемент следующим образом: Xpath.

"(//a[.='Link'])[2]"

ИЛИ

"(//a[.='Link'])[last()]"   //work if you have 2 Link with innerText ‘Link’

С атрибутом href

"(//a[@href='a.html'])[2]"

ИЛИ

"(//a[@href='a.html'])[last()]"   // work if you have 2 Link with same href
...