同一 xpath 值出现在网格的不同行上
Same xpath value appearing on different rows on a grid
对于我的自动化测试用例,我需要遍历一个网格来找到一个刚刚注册的人,以便我可以执行必要的操作。我试图通过 xpath 这样做,但我注意到虽然网格中有 100 多行,但当我执行以下操作时它只有 returns 31 行:
List<WebElement> RowCount=driver.findElements(By.xpath("//*[@id='grid']/div[5]/div/div/div[3]"));
System.out.println(RowCount.size());
网格通过以下方式加载:
<div class = "grid-widget">
<div id = "grid" style="width:99%;height:700px;">Loading...</div>
<div id="pager_grid" style="width:99%;height:20px;"></div>
</div>
<script>
var grid_grid;
var dataView_grid;
</script>
</div>
html是:
<div class="ui-widget-content slick-row even" style="top:0px">
<div class="slick-cell l0 r0">
<div class="slick-cell l1 r1" title="">test</div>
<div class="slick-cell l2 r2 active" title="James010315075108">James010315075108</div>
<div class="slick-cell l3 r3">test</div>
<div class="slick-cell l4 r4">12/04/1992</div>
<div class="slick-cell l5 r5">test</div>
<div class="slick-cell l6 r6">test</div>
<div class="slick-cell l7 r7">test</div>
<div class="slick-cell l8 r8"></div>
<div class="slick-cell l9 r9">test</div>
<div class="slick-cell l10 r10">test</div>
<div class="slick-cell l11 r11"></div>
<div class="slick-cell l12 r12">test@test.com</div>
<div class="slick-cell l13 r13">Pending</div>
</div>
<div class="ui-widget-content slick-row odd" style="top:25px">
<div class="slick-cell l0 r0">
<div class="slick-cell l1 r1">test</div>
<div class="slick-cell l2 r2">David010415075207</div>
<div class="slick-cell l3 r3">test</div>
<div class="slick-cell l4 r4">12/04/1992</div>
<div class="slick-cell l5 r5">test</div>
<div class="slick-cell l6 r6">test</div>
<div class="slick-cell l7 r7">test</div>
<div class="slick-cell l8 r8"></div>
<div class="slick-cell l9 r9">test</div>
<div class="slick-cell l10 r10">test</div>
<div class="slick-cell l11 r11"></div>
<div class="slick-cell l12 r12">test@test.com</div>
<div class="slick-cell l13 r13">Pending</div>
</div>
<div class="ui-widget-content slick-row even" style="top:50px">
<div class="slick-cell l0 r0">
<div class="slick-cell l1 r1">test</div>
<div class="slick-cell l2 r2">Roger010415081309</div>
<div class="slick-cell l3 r3">test</div>
<div class="slick-cell l4 r4">12/04/1992</div>
<div class="slick-cell l5 r5">test</div>
<div class="slick-cell l6 r6">test</div>
<div class="slick-cell l7 r7">test</div>
<div class="slick-cell l8 r8"></div>
<div class="slick-cell l9 r9">test</div>
<div class="slick-cell l10 r10">test</div>
<div class="slick-cell l11 r11"></div>
<div class="slick-cell l12 r12">test@test.com</div>
<div class="slick-cell l13 r13">Pending</div>
当我列出大约 15 行的特定列的 xpath 时,我看到已经有大约 2-3 次重复。
这种情况下如何遍历网格?任何帮助深表感谢。
- 看来你在找一个人。所以,我不会看到
使用
List<T>
的原因
- 有时这种网格需要一段时间才能加载,因此您可能需要实现一些明确的等待(如果
不需要)
Selenium 确实支持复合 class 并且我看到 class 对活跃用户的重要复合。你可以用那个。哪个行
很容易与 By byCss = By.cssSelector(".slick-cell.l2.r2.active");
css 选择器一起使用。但是,我看不出依赖特定 div
的原因,因为您(可能)正在寻找具有 active class 的用户,这可以很容易地完成如下。注意:我假设 active class 在网格中仅使用一次,并且仅针对您正在寻找的活跃用户。
By byCss = By.cssSelector(".active");
WebElement myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(byCss));
//do whatever you need to do here
通过执行以下操作,我能够进入我想要进入的 xpath:
By byXpath2 = By.xpath("//div[contains(text(),'" + Name + "')]/../div/select[contains(concat(' ', @class, ' '), ' editor-select ')]");
WebElement element2 = driver.findElement(byXpath2);
act.sendKeys(element2, "r").build().perform();
感谢@Saifur 的帮助。
对于我的自动化测试用例,我需要遍历一个网格来找到一个刚刚注册的人,以便我可以执行必要的操作。我试图通过 xpath 这样做,但我注意到虽然网格中有 100 多行,但当我执行以下操作时它只有 returns 31 行:
List<WebElement> RowCount=driver.findElements(By.xpath("//*[@id='grid']/div[5]/div/div/div[3]"));
System.out.println(RowCount.size());
网格通过以下方式加载:
<div class = "grid-widget">
<div id = "grid" style="width:99%;height:700px;">Loading...</div>
<div id="pager_grid" style="width:99%;height:20px;"></div>
</div>
<script>
var grid_grid;
var dataView_grid;
</script>
</div>
html是:
<div class="ui-widget-content slick-row even" style="top:0px">
<div class="slick-cell l0 r0">
<div class="slick-cell l1 r1" title="">test</div>
<div class="slick-cell l2 r2 active" title="James010315075108">James010315075108</div>
<div class="slick-cell l3 r3">test</div>
<div class="slick-cell l4 r4">12/04/1992</div>
<div class="slick-cell l5 r5">test</div>
<div class="slick-cell l6 r6">test</div>
<div class="slick-cell l7 r7">test</div>
<div class="slick-cell l8 r8"></div>
<div class="slick-cell l9 r9">test</div>
<div class="slick-cell l10 r10">test</div>
<div class="slick-cell l11 r11"></div>
<div class="slick-cell l12 r12">test@test.com</div>
<div class="slick-cell l13 r13">Pending</div>
</div>
<div class="ui-widget-content slick-row odd" style="top:25px">
<div class="slick-cell l0 r0">
<div class="slick-cell l1 r1">test</div>
<div class="slick-cell l2 r2">David010415075207</div>
<div class="slick-cell l3 r3">test</div>
<div class="slick-cell l4 r4">12/04/1992</div>
<div class="slick-cell l5 r5">test</div>
<div class="slick-cell l6 r6">test</div>
<div class="slick-cell l7 r7">test</div>
<div class="slick-cell l8 r8"></div>
<div class="slick-cell l9 r9">test</div>
<div class="slick-cell l10 r10">test</div>
<div class="slick-cell l11 r11"></div>
<div class="slick-cell l12 r12">test@test.com</div>
<div class="slick-cell l13 r13">Pending</div>
</div>
<div class="ui-widget-content slick-row even" style="top:50px">
<div class="slick-cell l0 r0">
<div class="slick-cell l1 r1">test</div>
<div class="slick-cell l2 r2">Roger010415081309</div>
<div class="slick-cell l3 r3">test</div>
<div class="slick-cell l4 r4">12/04/1992</div>
<div class="slick-cell l5 r5">test</div>
<div class="slick-cell l6 r6">test</div>
<div class="slick-cell l7 r7">test</div>
<div class="slick-cell l8 r8"></div>
<div class="slick-cell l9 r9">test</div>
<div class="slick-cell l10 r10">test</div>
<div class="slick-cell l11 r11"></div>
<div class="slick-cell l12 r12">test@test.com</div>
<div class="slick-cell l13 r13">Pending</div>
当我列出大约 15 行的特定列的 xpath 时,我看到已经有大约 2-3 次重复。
这种情况下如何遍历网格?任何帮助深表感谢。
- 看来你在找一个人。所以,我不会看到
使用
List<T>
的原因
- 有时这种网格需要一段时间才能加载,因此您可能需要实现一些明确的等待(如果 不需要)
Selenium 确实支持复合 class 并且我看到 class 对活跃用户的重要复合。你可以用那个。哪个行 很容易与
By byCss = By.cssSelector(".slick-cell.l2.r2.active");
css 选择器一起使用。但是,我看不出依赖特定div
的原因,因为您(可能)正在寻找具有 active class 的用户,这可以很容易地完成如下。注意:我假设 active class 在网格中仅使用一次,并且仅针对您正在寻找的活跃用户。By byCss = By.cssSelector(".active"); WebElement myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(byCss)); //do whatever you need to do here
通过执行以下操作,我能够进入我想要进入的 xpath:
By byXpath2 = By.xpath("//div[contains(text(),'" + Name + "')]/../div/select[contains(concat(' ', @class, ' '), ' editor-select ')]");
WebElement element2 = driver.findElement(byXpath2);
act.sendKeys(element2, "r").build().perform();
感谢@Saifur 的帮助。