Java Selenium WebDriver获取Div的table类型的子元素

Java Selenium WebDriver获取Div的table类型的子元素,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我有一个div元素,它有几个表作为子表。问题是我需要滚动才能访问某些表,因此如果我使用webElement.getElements(By.xpath(“//table[@id='data']”)我只会获得前两个元素(所有表元素都具有相同的id) 我需要一种方法来获取所有元素,或者以某种方式滚动div并继续读取元素。 我的selenium版本是2.37.1,我将它与Internet Explorer 8一起使用。我无法提供代码 <div id="statistics" style="over

我有一个div元素,它有几个表作为子表。问题是我需要滚动才能访问某些表,因此如果我使用
webElement.getElements(By.xpath(“//table[@id='data']”)
我只会获得前两个元素(所有表元素都具有相同的id)

我需要一种方法来获取所有元素,或者以某种方式滚动div并继续读取元素。 我的selenium版本是2.37.1,我将它与Internet Explorer 8一起使用。我无法提供代码

<div id="statistics" style="overflow-y: auto; overflow-x:hidden;">

<table id="header" width="50%" cellspacing="0" cellpadding="0" style="margin:0;">    </table>
<table id="data" width="50%" cellspacing="1" cellpadding="0" style="font-size: 12px;border:1px solid #5c9ccc;"></table>
<div id="separator"></div>
<table id="header" width="50%" cellspacing="0" cellpadding="0" style="margin:0;"></table>
<table id="data" width="50%" cellspacing="1" cellpadding="0" style="font-size: 12px;border:1px solid #5c9ccc;"></table>
<div id="separator"></div>
<table id="header" width="50%" cellspacing="0" cellpadding="0" style="margin:0;"></table>
<table id="data" width="50%" cellspacing="1" cellpadding="0" style="font-size: 12px;border:1px solid #5c9ccc;"></table>
<div id="separator"></div>

好的,所以我设法获得了发布部分html的权限。这就是那个小时候有很多桌子的部门。在这些子项中,我需要使用id=“data”读取所有表

我只得到前两个元素(所有表元素都有相同的id)

在同一页上有多个id相同的元素是非法的,这就是类的用途。Id是唯一的。因此,编辑您的id使其唯一,或者将表更改为具有
class=“data”

很抱歉,我无法提供代码:(


您可以使用不同的表达式,也可以只查找div下table类型的所有子项,但很抱歉,由于缺少代码,无法提供更好的答案。

经过大量调试和web搜索,我发现解决方案非常简单:我必须检索父项并调用click()之后,调用findElements()返回我需要的所有元素。

如果单击()如果不调用,WebDriver将模拟真实用户,这意味着只会得到两个结果,一个通常在页面中可见,而不滚动的结果。

这听起来是无效的HTML,这是一个基本问题。并且注释ID必须是唯一的。通过验证程序运行HTML,它将失败。在就您所描述的实际问题而言,有三件事:iFrame中的其他表是否存在?其他表是否可见和存在取决于网页上采取的某种操作?最后,问题是否在其他浏览器中消失?包含表的div元素实际上有很多表。如果我想全部查看,我需要滚动查看wn。我认为我最好的解决方案是找到一种在div中向下滚动的方法。我只看到两个元素,因为只有它们适合页面忘记提到,你是对的:网页制作得非常糟糕,但不是我制作的,所以我无法更改它。“其他元素是否可见和存在取决于网页上采取的某种操作?”这帮我想出了一个解决办法。谢谢