我搜索了谷歌代码上托管的Selenium Webdriver APi文档。目前正在使用PageFactory来初始化我的Page对象,但是在初始化WebElement列表时会出现问题。
我需要的是一种初始化元素列表的方法,理想情况下是一个下拉选择框列表。
我已经查看了对@Findsby和@ByChained的API引用,但仍无法找到初始化下拉列表选择框的最佳方法。我可以为每个人分配一个单独的WebElement并获取ID但是我想初始化List选择列表
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;
}
}
或者我必须为每个元素使用一个Web元素吗? :(
任何人都知道如何使用PageFactory并初始化List元素;使用FindsBy注释。我找不到任何办法这样做但是在selenium google docs网站上有谷歌问题说这已经在Java api绑定和版本2.12中得到修复,因为它在2.11中被误认为是......我仍然可以' t初始化列表。 = /
答案 0 :(得分:5)
最近在Selenium 2.0中添加了此功能。检查此issue。它现在已修好。
从文档中,您可以执行类似的操作,
@FindAllBy(className="selectItmes")
List<WebElement> selects;
如果您对代码感兴趣,请查看this
答案 1 :(得分:4)
以下是我在测试框架中所做的标准解决方案,直到@FindAllBy在Selenium库中不起作用:
private List<WebElement> selects;
public List<WebElement> getSelects() {
selects = getDriver().findElements(By.xpath("..."));
return selects;
}
答案 2 :(得分:1)
您可以非常轻松地找到选择选项,您只需使用Webdriver.Support 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#编写的
答案 3 :(得分:0)
@FindBys(@FindBy(xpath="//span[@class='ng-binding']"))
private List<WebElement> AllData;
public List<WebElement> getAllData() {
return AllData;
}
答案 4 :(得分:0)
我解决了这个问题,如:
@FindBy(id="element_id")
public List<WebElement> selects;
您现在拥有包含该ID的所有网络元素的列表。
然后,您只需从列表中获取元素,就像使用任何其他PageFactory WebElement列表一样。