java - 使用 selenium webdriver 解析 html 表的问题

标签 java firefox selenium xpath

我正在使用 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/

相关文章:

testing - 如何在 Selenium ui 测试期间交换模拟服务?

java - 如何使用Java代码识别Selenium中的页面是否有iframe?

java - 列表情况下的泛型类型转换

java - 无法反序列化 POJO 类的 HTTP 响应。抛出 START_ARRAY token

javascript - 内联 svg 作为指令(Firefox 问题)

html - 从 Firefox 中的 html 页面或从 Firefox 扩展调用 linux 命令

Java 8,比较两个映射并返回结果

java - 使用 nohup 运行 java jar 应用程序后无法执行 shell 脚本中的下一条语句

ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) -CentOS

使用 Webdriver.io + Selenium 进行 Node.js headless 网页抓取