我搜索了谷歌代码上托管的 Selenium Webdriver APi 文档。当前使用 PageFactory 来初始化我的 Page 对象,但在初始化 WebElement 列表时遇到问题。
我需要的是一种初始化元素列表的方法,最好是下拉选择框的列表。
我已经查看了对 @Findsby 和 @ByChained 的 API 引用,但仍然无法找出初始化下拉选择框列表的最佳方法。我可以为每个元素都有一个单独的 WebElement 并获取 ID,但我想初始化列表选择列表
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 文档网站上有 google 问题,说这已在 Java api 绑定和版本 2.12 中修复,因为它在 2.11 中被错误地禁用了......我仍然可以' t 初始化一个列表。 =/
这是我在测试框架中所做的标准解决方案,直到 @FindAllBy 在 Selenium 库中不起作用:
private List<WebElement> selects;
public List<WebElement> getSelects() {
selects = getDriver().findElements(By.xpath("..."));
return selects;
}
您可以相当轻松地找到选择选项,您所要做的就是使用 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# 编写的
@FindBys(@FindBy(xpath="//span[@class='ng-binding']"))
private List<WebElement> AllData;
public List<WebElement> getAllData() {
return AllData;
}
我像这样解决这个问题:
@FindBy(id="element_id")
public List<WebElement> selects;
您现在拥有具有该 ID 的所有 Web 元素的列表。
然后,您只需从列表中抓取该元素,就像抓取任何其他 PageFactory WebElement 列表一样。
我知道这是一个老问题,但因为类似的问题浪费了很多时间。最后的问题是我从未真正初始化过列表。所以这不起作用:
@FindBy(css = .randomlocator)
private List<WebElement> list;
但这有效:
@FindBy(css = .randomlocator)
private List<WebElement> list= new ArrayList<>();
也许会对某人有所帮助。
你能帮我吗,我在 selenium c# 上遇到这个问题
System.ArgumentException:成员类型“List
1' is not IWebElement or IList<IWebElement> at SeleniumExtras.PageObjects.DefaultPageObjectMemberDecorator.CreateObject(Type memberType, IElementLocator locator, IEnumerable
1 bys,布尔缓存)
在 SeleniumExtras.PageObjects.DefaultPageObjectMemberDecorator.Decorate(MemberInfo 成员,IElementLocator 定位器)
在 SeleniumExtras.PageObjects.PageFactory.InitElements(对象页面,IElementLocator 定位器,IPageObjectMemberDecorator 装饰器)
在 SeleniumExtras.PageObjects.PageFactory.InitElements(对象页面,IElementLocator 定位器)
在 SeleniumExtras.PageObjects.PageFactory.InitElements(ISearchContext 驱动程序,对象页面)