#webdriver #selenium-webdriver
#webdriver #selenium-webdriver
Вопрос:
Я искал документы API Selenium Webdriver, размещенные в Google code. В настоящее время использую 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…. Я все еще не могу инициализировать список. =/
Ответ №1:
Эта функция была недавно добавлена в Selenium 2.0. Проверьте эту проблему. Теперь это исправлено.
Из документов вы могли бы сделать что-то вроде,
@FindAllBy(className="selectItmes")
List<WebElement> selects;
Если вас интересует код, проверьте это
Комментарии:
1. оказывается, он был удален из выпуска, поскольку вызывал другие проблемы. ссылка : ( Неприятно, поскольку я обновил свой pom-файл текущей версией selenium из репозитория maven, которая является выпуском 2.11
2. На этой неделе выйдет новый релиз. Следите за обновлениями!
3. Я использую новейшие файлы библиотеки для привязок Selenium Webdriver .Net, но по-прежнему невозможно использовать [findBy(Как = Как. Идентификатор, используя = «id»)] общедоступный список элементов <IWebElement> { get; set; } Я получаю следующую ошибку: Сообщение: Система. Исключение ArgumentException : объект типа ‘Castle. Прокси. ‘IWrapsElementProxy_1’ не может быть преобразован в тип ‘System. Коллекции. Generic.List`1[openQA.Selenium. IWebElement]’.
4. @PatrickMagee Похоже, что вы используете findBy, вы пробовали @findAllBy?
5. Каков статус этого? В Selenium 2.25.0 нет этого класса.
Ответ №2:
Вот стандартное решение, которое я делаю в нашей тестовой среде, пока @findAllBy не начнет работать в библиотеке Selenium:
private List<WebElement> selects;
public List<WebElement> getSelects() {
selects = getDriver().findElements(By.xpath("..."));
return selects;
}
Ответ №3:
Вы можете довольно легко найти параметры выбора, все, что вам нужно сделать, это использовать Webdriver .Поддержка ссылки на dll. Это дает вам доступ к классу 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#
Ответ №4:
@FindBys(@FindBy(xpath="//span[@class='ng-binding']"))
private List<WebElement> AllData;
public List<WebElement> getAllData() {
return AllData;
}
Ответ №5:
Я решаю эту проблему следующим образом:
@FindBy(id="element_id")
public List<WebElement> selects;
Теперь у вас есть список всех веб-элементов с этим идентификатором.
Затем вы просто извлекаете элемент из списка, как и любой другой список веб-элементов PageFactory.
Ответ №6:
Я знаю, что это старый, но потерял много времени из-за подобной проблемы. С моей стороны проблема заключалась в том, что я никогда не инициализировал список. Так что это не сработало:
@FindBy(css = .randomlocator)
private List<WebElement> list;
но это сработало:
@FindBy(css = .randomlocator)
private List<WebElement> list= new ArrayList<>();
Может быть, это кому-то поможет.