有没有办法从WebElement中提取多个Web元素?例如,我有以下内容:
String filterRowXpath = "(//div[@id=\"tabItemFilters\"]//div[@id=\"RowExpGridWidgetGridPanel\"]//div[@class=\"x-grid3-body\"]//tbody)";
List<WebElement> filterRows = driver.findElements(By.xpath(filterRowXpath));
我最终得到一个包含5个元素的WebElement,有没有办法让我引用元素2和3?
答案 0 :(得分:0)
如果你有类似的话:
<tbody>
<webelement>1<webelement/>
<webelement>2<webelement/>
<webelement>3<webelement/>
</tbody>
如果你想要2或3,你可以添加相当于[position()=2]
或[position()=3]
的[2]或[3]。
所以对于你的XPath,如果你正在寻找其中任何一个职位,它将是...... //tbody[position()=2 or position()=3]
。请注意,如果您要搜索多个位置,则不能像上一个语句中那样使用简写。
<强>更新强>
filterRowXpath= "(((//div[@id=\"tabItemFilters\"]//div[@id=\"RowExpGridWidgetGridPanel\"]//div[@class=\"x-grid3-body\"]//tbody)[" + i + "])//td)[position()=2 or position()=3]
这将返回两个节点结果,而不是为每个结果执行单独的xpath。
List<WebElement> filterRows = driver.findElements(By.xpath(filterRowXpath));
然后将您的条件应用于WebElements。您几乎就在原始问题中发布的片段中。
答案 1 :(得分:0)
以下是我提出的建议:
String ipFromValueXpath;
String ipToValueXpath;
for(int i=1; i<=filterRows.size(); ++i) {
ipFromValueXpath = "(((//div[@id=\"tabItemFilters\"]//div[@id=\"RowExpGridWidgetGridPanel\"]//div[@class=\"x-grid3-body\"]//tbody)[" + i + "])//td)[2]";
ipToValueXpath = "(((//div[@id=\"tabItemFilters\"]//div[@id=\"RowExpGridWidgetGridPanel\"]//div[@class=\"x-grid3-body\"]//tbody)[" + i + "])//td)[3]";
WebElement e1 = driver.findElement(By.xpath(ipFromValueXpath));
String ipFromValue = e1.getText();
WebElement e2 = driver.findElement(By.xpath(ipToValueXpath));
String ipToValue = e2.getText();
if(ipFromValue.equals(ipFrom) && ipToValue.equals(ipTo)) {
e1.click();
element = driver.findElement(By.xpath(deleteFilterButtonXpath));
element.click();
Thread.sleep(500);
AdminFunctions.apply();
return;
}
}
我必须为每个元素获取Xpath,然后遍历每一行以查找匹配项。我不认为这是最有效的方式。