首页 文章

Selenium Webdriver和PageFactory初始化List <WebElement>元素

提问于
浏览
5

我搜索了谷歌代码上托管的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初始化列表 . = /

5 回答

  • 3

    这是我在测试框架中做的标准解决方案,直到@FindAllBy在Selenium库中不起作用:

    private List<WebElement> selects;
    
    public List<WebElement> getSelects() {
          selects = getDriver().findElements(By.xpath("..."));
          return selects;
        }
    
  • 0

    最近在Selenium 2.0中添加了此功能 . 检查这个issue . 现在修好了 .

    从文档中,你可以做类似的事情,

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

    如果您对代码感兴趣,请检查this

  • 5

    您可以非常轻松地找到选择选项,您只需使用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#编写的

  • 0
    @FindBys(@FindBy(xpath="//span[@class='ng-binding']"))
    
            private List<WebElement> AllData;
    
            public List<WebElement> getAllData() {
                return AllData;
            }
    
  • 1

    我这样解决了这个问题:

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

    您现在拥有该ID的所有Web元素的列表 .

    然后,您就像从任何其他PageFactory WebElement列表中一样从列表中获取元素 .

相关问题