Selenium Webdriver и PageFactory инициализируют элементы List <WebElement> - PullRequest
5 голосов
/ 04 ноября 2011

Я искал документы APi Selenium Webdriver, размещенные в коде Google.В настоящее время используется PageFactory для инициализации объектов моей страницы, но возникла проблема с инициализацией списка WebElement.

Мне нужен способ инициализации списка элементов, в идеале - списка раскрывающихся списков выбора.

Я посмотрел на ссылки API на @Findsby и @ByChained, но все еще не могу найти лучший способ инициализации списка выпадающих списков выбора.Я мог бы иметь отдельный WebElement для каждого и получить идентификатор, но я хотел бы инициализировать список выбора списка

В настоящее время я использую следующее:

public class PageObject {

        @FindBy(id="element_id")
        private WebElement element;

        public getElement() {
          return element;
        }
}

Есть ли способ, которым ямогу использовать что-то похожее на следующее, что я ищу:

public class PageObject {   

    @FindBys(className="selectItmes")
    private List<WebElement> selects;

    public List<WebElement> getSelects() {
      return selects;
    }  
}

Или я должен использовать один веб-элемент для каждого элемента?: (

Обновление

Кто-нибудь знает, как использовать PageFactory и инициализировать элементы списка; с помощью аннотации FindsBy. Я не могу найти никакого способа сделать это, но есть проблемы с Google вСелен google docs site говорит, что это было исправлено в привязках API Java и в версии 2.12, так как ошибочно отключено в 2.11 .... Я все еще не могу инициализировать список. = /

Ответы [ 5 ]

6 голосов
/ 05 ноября 2011

Эта функция была недавно добавлена ​​в Selenium 2.0.Проверьте это выпуск .Теперь это исправлено.

Из документов вы можете сделать что-то вроде:

@FindAllBy(className="selectItmes") 
List<WebElement> selects;

Если вас интересует код, отметьте this out

4 голосов
/ 17 ноября 2011

Вот стандартное решение, которое я делаю в нашей тестовой среде, пока @FindAllBy не работает в библиотеке Selenium:

private List<WebElement> selects;

public List<WebElement> getSelects() {
      selects = getDriver().findElements(By.xpath("..."));
      return selects;
    } 
1 голос
/ 23 ноября 2011

Вы можете найти опции выбора довольно легко, все, что вам нужно сделать, это использовать ссылку на dll Webdriver.Support. Это дает вам доступ к классу SelectElement. Вот быстрый пример:

IWebElement element = driver.FindElement(By.TagName("select"));

SelectElement select = new SelectElement(element);
int options = element.FindElements(By.TagName("option")).Count();
select.SelectByIndex(new Random().Next(1, options - 1));

Приведенный выше код находит элемент выбора, получает количество опций в этом элементе выбора и затем выбирает один случайным образом.

Код может немного отличаться, потому что мой код написан на C #

0 голосов
/ 23 декабря 2016

Я решаю эту проблему так:

@FindBy(id="element_id")
public List<WebElement> selects;

Теперь у вас есть список всех веб-элементов с этим идентификатором.

Затем вы просто извлекаете элемент из списка, как и любой другой список PageFactory WebElement.

0 голосов
/ 12 сентября 2014
      @FindBys(@FindBy(xpath="//span[@class='ng-binding']"))

        private List<WebElement> AllData;

        public List<WebElement> getAllData() {
            return AllData;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...