我正在使用标准的HTML表(tr(行),td(数据))
对于每条记录,我必须单击每行的详细信息页面,以确定它是否是继续测试过程的有效策略。
无效时,脚本单击页面上的后退按钮以返回到策略表。但是,当然,由于浏览器离开了表页面,因此表中的WebElement已经过时,无法再访问。
我试图将网络元素存储在这样的列表中...
List<IWebElement> rows = new List<IWebElement>(table.FindElements(By.TagName("tr")));
...但是这不能解决元素过时的问题。
因为每个步骤都返回到...
foreach (var row in rows)
...行,这当然是在存储Webelements之后出现的,我还没有找到一种在继续之前先重新存储tr Webelements的方法。
有人遇到过这种情况吗?还是有人找到了解决这种情况的聪明方法?
答案 0 :(得分:0)
从策略详细信息页面返回到策略表页面时,需要在策略表页面上再次查找行。
List<IWebElement> rows = new List<IWebElement>
(table.FindElements(By.TagName("tr")));
foreach (var row in rows) {
...
// click back button on detail page
backButton.click()
// find the rows on table page again
sleep(<5-10 seconds>) for debug purpose,
rows = new List<IWebElement>(table.FindElements(By.TagName("tr")));
}
// I'm not suer the foreach can remain the next iterate index even
// I assign new value to the `rows`. If foreach can't work in such case,
// change to `for(var i=0;i<length;i++)` pattern.
答案 1 :(得分:0)
我确实有类似的情况,并且我通过for循环执行它。
您可以参考此示例(语法属于Java,您可以根据C#引用它)
public void locateElement(int i) {
driver.findElement(By.xpath("(//a[@class=''])[" + i + "]")).click();
}
try {
List<WebElement> rows = new List<WebElement>(table.FindElements(By.TagName("tr")));
for (int i = 1; i <= rows.size(); i++) {
//To locate on main page, need to use i for each row
locateElement(i);
rows = new List<IWebElement>(table.FindElements(By.TagName("tr")));
}
} catch (Exception e) {
e.printStackTrace();
}
答案 2 :(得分:0)
导航到其他URL时,无法保留元素列表,因为DOM已被清除,因此所有引用都将被清除。
您必须对行进行计数并遍历该数字。
|| *id* || *post_title* || *post_name* || *brand_title* || *brand_name* || *size_title* || *size_name*
|| 758 || Item recordado 88 Item || item-recordado-88 || Brand Test 04 || brand-test-04 || 200 ml / 6.8 oz || 200-ml-6-8-oz