Selenium Webdriver и PageFactory инициализируют элементы List ‹WebElement›

Я искал документы Selenium Webdriver APi, размещенные в коде 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. Я не могу найти способ сделать это, но на сайте selenium google docs есть проблемы с google, в которых говорится, что это было исправлено в привязках Java api и в версии 2.12, поскольку это было ошибочно отключено в 2.11 .... Я все еще могу ' t инициализировать список. знак равно


person Patrick Magee    schedule 04.11.2011    source источник


Ответы (4)


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

private List<WebElement> selects;

public List<WebElement> getSelects() {
      selects = getDriver().findElements(By.xpath("..."));
      return selects;
    } 
person Dmitry    schedule 17.11.2011

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

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

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

Если вас интересует код, проверьте это из

person nilesh    schedule 04.11.2011
comment
Спасибо за ответ, нилеш! - person Patrick Magee; 07.11.2011
comment
Оказывается, он был удален из выпуска, поскольку вызывал другие проблемы. ссылка :( Расстраивает, поскольку я обновил свой файл pom с помощью текущий выпуск селена из репозитория maven, который является выпуском 2.11 - person Patrick Magee; 07.11.2011
comment
На этой неделе будет новый релиз. Будьте на связи! - person nilesh; 07.11.2011
comment
Я использую новейшие файлы библиотеки для привязок Selenium Webdriver .Net, но по-прежнему невозможно использовать [FindBy (How = How.Id, Using = id)] элементы общедоступного списка ‹IWebElement› {get; установленный; } Я получаю следующую ошибку: Сообщение: System.ArgumentException: объект типа Castle.Proxies.IWrapsElementProxy_1 не может быть преобразован в тип System.Collections.Generic.List`1 [OpenQA.Selenium.IWebElement] ». - person Patrick Magee; 17.11.2011
comment
@PatrickMagee Похоже, вы используете FindBy, вы пробовали @FindAllBy? - person nilesh; 17.11.2011
comment
Перешел на .Net, атрибута [FindAllBy нет. - person Patrick Magee; 17.11.2011
comment
Изначально вопрос был по Java? Возможно, вы захотите отредактировать вопрос о том, что ищете решение .Net. - person nilesh; 17.11.2011
comment
Да, я могу обновить его завтра. Я думаю, это глупо, что привязки api для каждого языка не содержат одинаковой функциональности = / надеюсь, кто-то разбирается с привязками .Net API. Вы выигрываете, некоторые проигрываете, используя разные языки = / - person Patrick Magee; 17.11.2011
comment
Вы также можете разместить свой вопрос в группе Google WebDriver. Может быть, есть API для .net, которого мы не знаем. Их API-интерфейсы довольно стандартные для всех привязок, я был бы удивлен, если одна функция доступна в Java, а такая же отсутствует в .Net или python- groups.google.com/group/webdriver - person nilesh; 18.11.2011
comment
Какой у этого статус? Selenium 2.25.0 не имеет этого класса. - person djangofan; 04.10.2012

Вы можете довольно легко найти параметры выбора, все, что вам нужно сделать, это использовать ссылку на 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));

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

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

person CBRRacer    schedule 23.11.2011

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

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

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

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

person Jason Smiley    schedule 22.12.2016