Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当表按指数递减时,如何仅迭代每行的最后一列数据_Java_Selenium_Selenium Webdriver - Fatal编程技术网

Java 当表按指数递减时,如何仅迭代每行的最后一列数据

Java 当表按指数递减时,如何仅迭代每行的最后一列数据,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我有一个带有tr和td的HTML表。值会根据给定的日期选择进行更改。我需要迭代每一行、最后一列数据并添加它们。该值每行减少一个。 请帮助我,如何只获取每行的最后一列数据。图像附在下面并高亮显示 HTML代码 时间 安装 1. 2. 3. 4. 5. 2016年10月 3. 3. 1. 0 0 **0** 2016年11月 16056 10790 7861 7186 **7186** - 2016年12月 85254 38098 33857 **33790** - - 2017年1月 24814

我有一个带有tr和td的HTML表。值会根据给定的日期选择进行更改。我需要迭代每一行、最后一列数据并添加它们。该值每行减少一个。 请帮助我,如何只获取每行的最后一列数据。图像附在下面并高亮显示

HTML代码
时间
安装
1.
2.
3.
4.
5.
2016年10月
3.
3.
1.
0
0
**0**
2016年11月
16056
10790
7861
7186
**7186**
-
2016年12月
85254
38098
33857
**33790**
-
-
2017年1月
24814
14883
**14839**
-
-
-
2017年2月
227
**226**
-
-
-
-
2017年3月
**0**
-
-
-
-
-
如果您看到上图,则值呈指数下降,甚至元素标记也会随着cornelius low、cornelius high、cornelius medium等的变化而变化


我试着用下面的代码来保持循环。由于元素标记正在更改,无法仅获取0、7186、33790、14839、226

请尝试使用下面的代码获取每个元素的最后一个
td

List<WebElement> rows = driver.findelements(By.xpath('//table[@class="cornelius-table"]//tr[not(th)]'));
Iterator<WebElement> iter = rows.iterator();
while(iter.hasNext()) {
    WebElement tr = iter.next();
    td = tr.findelement(By.xpath('./td[not(@class="cornelius-empty")][last()]'));
    System.out.println(td.getText());
    }
}
List rows=driver.findelements(By.xpath('//table[@class=“cornelius table”]//tr[not(th)]);
迭代器iter=rows.Iterator();
while(iter.hasNext()){
WebElement tr=iter.next();
td=tr.findelement(By.xpath('./td[not(@class=“cornelius empty”)][last()]);
System.out.println(td.getText());
}
}

@Andersson代码应该适合您。如果没有,那么根据他的建议,页面加载时可能会弹出
t正文
。因此,您可以将他的代码替换为下面的代码(我还添加了
td
中缺少的
WebElement
接口参考):

List rows=driver.findElements(By.xpath(“//table[@class='cornelius-table']//tr”);
迭代器iter=rows.Iterator();
while(iter.hasNext()){
WebElement tr=iter.next();
WebElement td=tr.findelelement(By.xpath(“./td[not(@class='cornelius-empty')和last()”);
System.out.println(td.getText());
}
}
如果上面的方法仍然不起作用,您可以尝试下面的方法,这是使用xpath的更优化的版本:

List<WebElement> tabledata = driver.findElements(By.xpath("//table[@class='cornelius-table']//tr/td[not(@class='cornelius-empty') and last()]"));
for(WebElement td: tabledata)
 System.out.println(td.getText());
List tabledata=driver.findElements(By.xpath(//table[@class='cornelius-table']//tr/td[not(@class='cornelius-empty')和last()));
for(WebElement td:tabledata)
System.out.println(td.getText());
上面的代码将使用
class
as
cornelius table
查找表中每行中最后的
td
元素,并将其放入列表
tabledata
。然后使用for each循环,遍历列表
tabledata
,获取并打印内部文本


编辑我已经根据OP提供的HTML代码片段修改了上述代码片段。

为同一张非图片添加
HTML
代码片段你刚才不是在这里发布了一个类似的问题吗?在任何情况下,请共享您的代码,以便有人可以帮助您。否则,它基本上是从零开始写一个解决方案。@barakmanos你在说什么?@Mistalis:不,我很确定不久前我看到过一个类似的问题(细节较少)。是的,我就是那个。他以前发过帖子。但这完全是另一个问题。我解决了它,并能够获取括号中的内容。这是不同的问题,我尝试了上面的代码。获取===失败:demoAppVerification org.openqa.selenium.NoSuchElementException:找不到元素:{“方法”:“xpath”,“选择器”:“//td[last()]”}//////td[last()]=此元素的用途是什么。它是否获取行的最后一列。我猜这是因为自动生成的
元素尝试使用
'//table[@class=“cornelius table”]//tr'
而不是
'//table[@class=“cornelius table”]/tr'
td[last()]
应该匹配每个
tr
的最后一个元素
td
,我试过了,但仍然面临一个问题。正在获取-此定位器的NoTouchElementException//td[last()]尝试
System.out.println(rows.size())。它返回的数字是否大于
0
?好的,我将尝试解释。。。所有last
td
s,除了first,都以
“-”
的形式返回文本,因此我们不能只使用
[last()]
“marker”,但我们需要最后一个非空的
td
-
td
,它不包含类
“cornelius empty”
,只获取最后一列数据。如果你看到上面的图片。9665列正在控制台中打印。但是它应该以指数形式减少。@Ram,感谢您添加HTML代码段。请查找上面更新的代码段。现在xpath将定位最后出现的
tabledata
,它不包含类
cornelius empty
,该类显然是在最后出现的,其中没有数据。
List<WebElement> rows = driver.findElements(By.xpath("//table[@class='cornelius-table']//tr"));
Iterator<WebElement> iter = rows.iterator();
while(iter.hasNext()) {
    WebElement tr = iter.next();
    WebElement td = tr.findElement(By.xpath("./td[not(@class='cornelius-empty') and last()]"));
    System.out.println(td.getText());
    }
}
List<WebElement> tabledata = driver.findElements(By.xpath("//table[@class='cornelius-table']//tr/td[not(@class='cornelius-empty') and last()]"));
for(WebElement td: tabledata)
 System.out.println(td.getText());