有人可以协助解决以下问题: 我有一个动态数据表,每行有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 [当前数字] ? 先感谢您
这是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>
答案 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
(或等效的)......你应该是:)。你可以自己进行验证。