用li元素迭代表格
问题描述:
有人可以协助下列问题: 我有一个动态数据表,每行有5个元素(有30行)。我必须遍历每一行,拾取每列的数据并检查它是否不为零。 这里是如何看起来页面上(实际上它捡起从XPath的):用li元素迭代表格
/html/body/main/article/div/div[3]/div[1]/div/div/ol[1]/li[3]/div[1]/a
以上就是其用户名第一个用户。 所有的用户名(从表)我看到:
/html/body/main/article/div/div[3]/div[1]/div/div/ol[1]/li/div[1]/a
正如你可以看到最后李还没有一个数字,如果达到,它指向的位置的用户名:1,2,3。 ... 30 所以,我的问题是,我怎么能在里面使用li元素迭代。我尝试这样做:
First found size of table:
int all = driver.findElements(By.xpath("/html/body/main/article/div/div[3]/div[1]/div/div/ol[1]/li/div[1]/a")).size();
for (int i = 0; i < all; i++) {
//check if username exists and convert int to a string
String j = Integer.valueOf(i);
最后它放入找到的XPath元素(最后李):
driver.findElements(By.xpath("/html/body/main/article/div/div[3]/div[1]/div/div/ol[1]/li["+get(j)+"]/div[1]/a"))
我是什么做错了,并在每一次迭代没有得到改变李[当前号码] ? 预先感谢您
这里是HTML:
<li class="list-item row">
<div class="column large-4 compete-standings-user">
<div class="user-photo"><img
<a "profile/kalaka" title="Kalaka">Kalaka</a>
<div class="column large-2 small-3 compete-standings-data">
<strong>71</strong>blogs</div>
<div class="column large-2 small-3 compete-standings-data">
<strong>+69.9</strong>Accepted</div>
<div class="column large-2 small-3 compete-standings-data">
<strong>+21.1%</strong>Pending</div>
<div class="column large-2 small-3 compete-standings-datae">
<strong>L100</strong>Earned</div>
答
所以快速的方法来获得您想要检查的文本是使用CSS选择器,ol.compete-standings > strong
。如果您注意到HTML,那么您要检查的每个数字都在STRONG
标记中。该定位器获取外部OL
标签内的所有STRONG
标签。
List<WebElement> numbers = driver.findElements(By.cssSelector("ol.compete-standings > strong"));
for (WebElement number : numbers)
{
String s = number.getText().replaceAll("[^\\d]", "");
Assert.assertNotEquals(0, Integer.parseInt(s));
}
此代码剔除掉所有字符除了数字,将字符串转换为一个int
,并断言(用TestNG),其数量不为零。如果你没有使用TestNG
(或等价物)...你应该是:)。你可以在你自己的验证。
你能链接页面吗? – JeffC
@JeffC不幸的是,因为它处于开发阶段,而不是公众 – Zoran
@JeffC如果可以帮助添加有问题的截图。请注意,列表(用户)中有第6和第7个,我必须提取(在一次迭代中)其用户名,检查博客的数量是否存在,待处理的数量,获得的数量以及之后转到第7个用户(下一个一个)等等。 – Zoran