我正在尝试逐行迭代地读取此表中的数据。不知何故,我要么最终找不到web元素,要么它工作正常,对象不会存储到List(尝试读取第0项时得知 - 返回arrayindexoutofbounds异常)。我的HTML(更多样本看起来像这样 -
<div class="g1 sgs">
<table class="c67 bt dc " cellspacing="0" cellpadding="0" style="position:absolute;top:25px;left:17px;" cols="16" idref="2.7" bid="7">
<colgroup>
<tbody>
<tr style="height:67px;" type="header">
<td> ....
<tr style="height:24px;">
<td>....
<tr style="height:24px;">
<td>....
</div>
这是我尝试阅读此表的方法(也尝试使用xpath,id和不同的组合) -
List<WebElement> elements = driver.findElements(By.cssSelector("table[class='c67 bt dc']"));
System.out.println(" Test Data :: " + elements.get(0)); // returns arrayIndexOutOfBounds
for (Iterator<WebElement> iterator = elements.iterator(); iterator.hasNext();) {
WebElement webElement = iterator.next();
我的目的是读取特定列的每一行(日期数据)并进行比较以进行验证。
答案 0 :(得分:0)
异常意味着driver.findElements(By.cssSelector("table[class='c67 bt dc']"));
返回一个空集合。
这意味着您的定位器错误或元素不可见&amp;当你认为它们出现在屏幕上时。
快速浏览一下,我可以看到类名末尾的尾随空格:
<table class="c67 bt dc ">
所以这个CSS选择器:
table[class='c67 bt dc']
如果table
的{{1}}属性完全 等于到class
,才会匹配。事实并非如此。 等于到c67 bt dc
(注意额外的空格)
虽然在没有网页知识的情况下,很难知道这些类名是否实际上是静态的,并且是“获取”表元素的最佳方式。尽管如此,有很多方法可以做到这一点,但将只是集中在CSS选择器上:
你可以使用:
c67 bt dc
或者,在匹配完全类名时更加“宽松”:
table.c67.bt.dc
甚至:
table.c67