使用li元素遍历表

时间:2017-11-11 11:42:28

标签: java selenium-webdriver

有人可以协助解决以下问题: 我有一个动态数据表,每行有5个元素(有30行)。我必须遍历每一行,拾取每列的数据并检查它是否不为零。 以下是它在页面上的显示方式(实际上它是从xpath中获取的):

/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

正如您所看到的, li 没有数字,如果有,则指向位置上的用户名: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元素中(最后一个li):

driver.findElements(By.xpath("/html/body/main/article/div/div[3]/div[1]/div/div/ol[1]/li["+get(j)+"]/div[1]/a"))

在每次迭代中,我做错了什么并没有改变 li [当前数字] ? 先感谢您 enter image description here

这是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>

enter image description here

1 个答案:

答案 0 :(得分:1)

因此,获取要检查的文本的快捷方法是使用CSS选择器ol.compete-standings > strong。如果您注意到HTML,则要检查的每个号码都位于STRONG标记中。此定位器获取外部STRONG标记内的所有OL标记。

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(或等效的)......你应该是:)。你可以自己进行验证。