Java 使用selenium webdriver解析html表时出现问题
我正在使用SeleniumWebDriver和java来测试我公司的一个web应用程序,我面临一个非常奇怪的问题。登录后的web应用程序显示此表,其值如下面链接中的图片所示: 我编写了这段代码,用xpath解析表,因为表的行和td单元格没有idJava 使用selenium webdriver解析html表时出现问题,java,firefox,selenium,xpath,Java,Firefox,Selenium,Xpath,我正在使用SeleniumWebDriver和java来测试我公司的一个web应用程序,我面临一个非常奇怪的问题。登录后的web应用程序显示此表,其值如下面链接中的图片所示: 我编写了这段代码,用xpath解析表,因为表的行和td单元格没有id //Parsing the table. int increment = 0; int i = 0; for(increment=
//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();
//解析表。
整数增量=0;
int i=0;
对于(增量=1;增量一个想法,
你为什么加上
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异常引起的,这可能会避免它。给出web应用程序的html代码。XPath太可怕了!不要对计数器循环使用。设置一个循环,在其中迭代findElements(按.tagname('tr'))
,以及一个内部循环,在其中迭代findElements(按.tagname('td'))
。为了避免出现此异常,必须切换到使用ExpectedCondition类,而不是thread.sleep(),以等待脚本完成加载。之后,我切换到findElements(),并使用增强的for循环解决了丢失值的问题。感谢大家的建议。