我在另一个表的行中有一个行,该表有很多行(其他表有行)。
哇。这令人困惑。让我把它摆在你面前!
.//*[@id='chatComponent']/div/swx-navigation
/div/div/div/div[2]/div[1]/div/ul/li[*]/div/ul/li[*]
第一桌&行从这里开始:
firstTable = /div/div/div/div[2]/div[1]/div/ul/li[*]
第二个表&行从这里开始:
secondTable = firstTable/div/ul/li[*]
这是我的代码,我正在试验System.out.print如何表中的所有项目(在第一个表中)
List<WebElement> liElements = driver.findElements(By
.xpath(".//*[@id='chatComponent']/div/swx-navigation/div/div/div/div[2]/div[1]/div/ul/li[*]"));
List<WebElement> liElements2 = driver.findElements(By
.xpath(".//*[@id='chatComponent']/div/swx-navigation/div/div/div/div[2]/div[1]/div/ul/li[*]/div/ul/li[*]"));
System.out.println(liElements.size());
System.out.println(liElements2.size());
for (int i = 1; i < liElements.size()+1; i++) {
if (i < liElements.size() ){
WebElement linkElement = driver
.findElement(By
.xpath(".//*[@id='chatComponent']/div/swx-navigation/div/div/div/div[2]/div[1]/div/ul/li[1]/div/ul/li[" + i + "]"));
System.out.println(linkElement.getText());
} else if (i == liElements.size()){
WebElement linkElement2 = driver
.findElement(By
.xpath(".//*[@id='chatComponent']/div/swx-navigation/div/div/div/div[2]/div[1]/div/ul/li[*]/div/ul/li[" + i + "]"));
System.out.println(linkElement2.getText());
}
}
现在的问题是,它将遍历表的第一个表,直到找不到更多的对象然后抛出错误,但它不会移动到下一个表上打印对象。它只是说OK,打印了这个表中的所有元素,但继续在同一个表中查找另一个不存在的元素并失败。
我在问,我怎么能实现这个目标?
非常感谢任何帮助。
答案 0 :(得分:1)
您应该遵循以下算法:
从外部表的每一行中,找到每个内部表中的行,并遍历内部表行。
// find all the rows in the outer table
List<WebElement> outerLIElementList = driver.findElements(
By.xpath(".//*[@id='chatComponent']/div/swx-navigation/div/div/div/div[2]/div[1]/div/ul/li"));
System.out.println(outerLIElementList.size());
// iterate through the rows in the outer element
for (WebElement outerLIElement : outerLIElementList) {
// find the inner table rows using the outer table row
List<WebElement> innerLIElementList = outerLIElement.findElements(By.xpath("//div/ul/li[*]"));
// iterate through the inner table rows and sysout
for (WebElement innerLIElement : innerLIElementList) {
System.out.println(innerLIElement.getText());
}
}