如何在页面对象中指定元素列表而不为每个元素指定一个元素

How to specify a list of elements in a pageobject without having a element for each of them

我有一长串要访问的元素。它们都有一个相似的 id,索引从 1 到 47。 有没有一种好的方法可以将它们作为数组或列表进行访问,因为我希望能够遍历它们,而不是对每个单独的都这样做

[FindsBy(How = How.Id, Using = "ElementId1")]
public IWebElement Element1;
[FindsBy(How = How.Id, Using = "ElementId2")]
public IWebElement Element2;
[FindsBy(How = How.Id, Using = "ElementId....")]
public IWebElement Element....;

然后列出元素?

我能否以某种方式创建一个循环来找到它们并将它们放入数组本身,这样我就不需要手动定义每个?

您可以查找以 id="ElementId"

开头的元素
[FindsBy(How = How.CssSelector, Using = "[id^='ElementId']")]
public List<IWebElement> Elements;

如果数字在中间,您可以搜索以 "Element" 开头并以 "Id"

结尾的带有 id 的元素
[FindsBy(How = How.CssSelector, Using = "[id^='Element'][id$='Id']")]
public List<IWebElement> Elements;

您可以使用包含 id 属性的 Xpath

 @FindBy(how= How.XPATH, using= "//*[contains(@id, 'ElementId')]")
    private List<WebElement> allElements;

CSS 开始使用 ^

@FindBy(how= How.CSS, using= "[id^='ElementId']")
private List<WebElement> allElements;

两者都使用 @FindAll 注释

@FindAll({@FindBy(how= How.CSS, using= "[id^='ElementId']"),
        @FindBy(how= How.XPATH, using= "//*[contains(@id, 'ElementId')]")})
private List<WebElement> allElements;