繁体   English   中英

使用Selenium Webdriver解析html表时出现问题

[英]Problematic parsing of html table with selenium webdriver

我正在使用带有Java的Selenium Webdriver在我的公司中测试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”)而不是getText方法,但遇到了同样的随机问题。

有谁知道为什么会这样吗? 抱歉,链接,但我没有其他办法可以向您显示我的问题。.如果需要,我还可以发布测试期间获得的随机错误输出。

一想到,为什么要加上?

                catch (StaleElementReferenceException ed) {           
                    ed.getSuppressed();
                }  

如果没有赶上,您是否会收到此异常? 如果是 ,则可能是您的页面或元素正在刷新,并且当您在第二行上将f引用到getText()时,您可能会收到StaleElementReferenceException,但是在您抑制它时,您的循环继续进行,并且值由于exception丢失

你可以尝试更换

  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异常引起的,那么这可能会避免。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM