嗨,我的代码有效,我的目标是循环遍历表中的每个元素,然后单击该元素,这样我就可以转到下一页,基本上我想这样做
1 click element form drop down
2 //code some stuff
3 Go back
4 click next element from drop down
5 code some stuff and etc
我的代码:
List<WebElement> CCTable = driver.findElements(By.id("companyIdBarCompListGrid_rows_scrollpane"));
for ( WebElement client: CCTable) {
System.out.println("\n"+client.getText().substring(0, 20)+"\n");
client.click();
Thread.sleep(10000);
}
我的问题是它在 eclipse ** 的 **控制台中查找并打印出文本,但它没有单击链接或每个链接。
我正在尝试遵循此处的建议 https://sqa.stackexchange.com/questions/12790/how-to-iterate-over-a-collection-of-items-in-selenium-webdriver但没有成功任何帮助将不胜感激。
如果我做错了什么,请帮助我。任何帮助将不胜感激
<小时/>PP_OBJ_CycleData.CCdropdown(driver).click();
List<WebElement> CCTable = driver.findElements(By.cssSelector("div#companyIdBarCompListGrid_rows_scrollpane table tbody tr[id*=companyIdBarCompListGrid_] td span div a"));
// inner 4 loop
for ( WebElement ccode: CCTable) {
System.out.println("\n"+ccode.getText().substring(0, 20)+"\n");
System.out.println("Number of links: " + CCTable.size());
Thread.sleep(3000);
ccode.click();
Thread.sleep(5000);
driver.findElement(By.xpath("//*[@id='companyIDBarContentPane']//span"));
}// End Inner 4 loop
PP_OBJ_CycleData.ReturnToSupport(driver);
这也是在 Eclipse 控制台中:
似乎获取文本没有获取其他公司代码名称。点击第一个名字后,它不再循环,我点击我得到 org.openqa.selenium.StaleElementReferenceException:过时的元素引用:元素未附加到页面文档。
最佳答案
问题是你识别了错误的东西
ID 指向 DIV。并且只有一个 DIV;没有什么可迭代的。虽然 DIV 是可点击的,但点击 DIV 不会执行任何操作。
相反,您需要找到 A 标签。这在表格中可能非常困难;而且所有的 ID 都没有真正的帮助。
基本上你想要一些效果:
List<WebElement> CCTable = driver.findElements(By.cssSelector("div#companyIdBarCompListGrid_rows_scrollpane table tbody tr[id*=companyIdBarCompListGrid_] td span div a");
你可能需要玩一下它。您可以在 List 声明之后添加此行:
System.out.println("Number of links: " + CCTable.size());
当它符合您的期望时,您就找到了正确的 findElements 字符串。
关于java - 循环浏览 Web 元素并单击每个链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49161689/