不可读的html表数据到List

时间:2014-01-21 04:32:20

标签: java list selenium

我正在尝试逐行迭代地读取此表中的数据。不知何故,我要么最终找不到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();

我的目的是读取特定列的每一行(日期数据)并进行比较以进行验证。

1 个答案:

答案 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