Java 使用selenium webdriver解析html表时出现问题

Java 使用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=

我正在使用SeleniumWebDriver和java来测试我公司的一个web应用程序,我面临一个非常奇怪的问题。登录后的web应用程序显示此表,其值如下面链接中的图片所示:

我编写了这段代码,用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();
//解析表。
整数增量=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循环解决了丢失值的问题。感谢大家的建议。