我正在使用 selenium webdriver 和 java 来测试我公司的 web 应用程序,我遇到了一个非常奇怪的问题。登录后的 Web 应用程序显示此表,其值如下链接中的图片所示:
https://drive.google.com/file/d/0B0i_2gNTlx1Sek9EQVQ1ZlY1a0E/view?usp=sharing
我编写了这段代码,它使用 xpath 解析表格,因为表格的行和 td 单元格没有 id。
//Parsing the table.
int increment = 0;
int i = 0;
for(increment=1; increment <= 16; increment++){
StringBuilder nsb = new StringBuilder("");
StringBuilder sb = new StringBuilder("");
for(i=1; i <= 6; i++){
try {
WebElement f = wd.findElement((By.xpath("/html/body/div[1]/div/div[2]/div/div[2]/div[2]/div[2]/div/div[1]/form/div/div/table/tbody/tr["+increment+"]/td["+i+"]")));
sb.append(f.getText().replaceAll("\\n", " ")).append(" ");
} catch (StaleElementReferenceException ed) {
ed.getSuppressed();
}
}
System.out.println(sb);
}
System.out.println();
现在的问题是,当我有时以随机顺序打印每一行的值时,我会丢失输出中的一些值,如下图所示(例如,如果我重新运行程序中的第二个字段)第二行称为 SAB 将丢失)。
正确的输出是
https://drive.google.com/file/d/0B0i_2gNTlx1SQmFoZDd0UkgzVXM/view?usp=sharing
我试过而不是 获取文本 方法 getAttribute("textContent") 但我面临同样的随机问题。
有谁知道为什么会这样?
抱歉链接,但我没有其他选择来向您展示我的问题..如果需要,我也可以发布我在测试期间得到的随机错误输出..
最佳答案
一个念头,
你为什么加?
catch (StaleElementReferenceException ed) {
ed.getSuppressed();
}
如果没有捕捉到,你会得到这个异常吗?
如果是 , 然后
可能是您的页面或元素正在刷新
当您在第二行将 f 引用到 getText() 时,您可能会得到 StaleElementReferenceException,但是当您抑制它时,您的循环会继续,由于异常 导致值丢失.
你可以尝试更换
WebElement f = wd.findElement((By.xpath("/html/body/div[1]/div/div[2]/div/div[2]/div[2]/div[2]/div/div[1]/form/div/div/table/tbody/tr["+increment+"]/td["+i+"]")));
sb.append(f.getText().replaceAll("\\n", " ")).append(" ");
用单一语句
sb.append(wd.findElement((By.xpath("/html/body/div[1]/div/div[2]/div/div[2]/div[2]/div[2]/div/div[1]/form/div/div/table/tbody/tr["+increment+"]/td["+i+"]"))).getText().replaceAll("\\n", " ")).append(" ");
如果问题是由它引起的,这可能会避免 staleElement Exception。
关于java - 使用 selenium webdriver 解析 html 表的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29927778/