如何在页面对象中指定元素列表而不为每个元素指定一个元素
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;
我有一长串要访问的元素。它们都有一个相似的 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;