关于seleium运用中几个问题的总结

1.元素被点击后没有效果。

          此问题困扰我几个小时,百思不得其解。通过上网查找此问题的原因以及解决方法。

   网上大家通常提供的原因分析为此为被点击元素的外层元素遮挡,导致点击此元素无效。

   其解决方法为在点击该元素之前先点击其他元素或者点击外层元素,然后在点击此元素。

   或者直接提供给了其他解决方法 使用webdriver执行js方法点击元素以及使用Robot类点击

   鼠标或键盘等,都没能解决我的问题。

          通过不断的尝试,发现了问题所在,那是因为使用的chrome浏览器的大小默认设置为中。

  但是webdriver在自动打开浏览器后chrome只有半屏幕大小,而我在代码中人为将chrome放为

  全屏。这正式问题所在。当我去掉调整浏览器大小的代码后,再次测试,结果生效。点击时间正常。

 

2.找不到元素超时报错。

       在前面的文章中,我提到过可以通过显示或者隐式设置元素点击超时时间。这里不再重述。但是我在测试

是遇到不论设置显示等待多长时间都会报超时错误,请注意,此时需要操作的元素也早已在画面上显示。

此问题在网上没有找到相应的正解。后面在代码上发现了这个问题。那就是我当时处理的画面是一个比较复杂的

画面,画面采用iframe等前端框架。大家都知道,要操作元素前必须将driver驱动switch to此元素所在的iframe中,只有

这样才能定位到此元素。我但是确实是在switch to iframe后操作的元素,但是由于switch to iframe前的等待时间太短,iframe

还没出来或是上一个画面还没退出就switch to ,导致没能switch to成功,这样即使在点击元素前等待时间多长以及设置显示等待

时间多长,都报找不到元素的错误。所以解决方法是将switch to iframe操作前的时间设置长一点,操作具体元素前的时间就可以

不用设置那么长啦。

 

3.如何判断元素存不存在

由于采用driver.findElement(By....)方法获取元素时,如果元素不存在就直接报错,这里提供两中判断元素是否存在的方法。

    方法1:通过driver.findElements(By....)获取元素list列表,然后判断列表中是否有元素即可

    方法2:通过try catch 程序块捕获异常,如果出现一场返回一个标志符,没有出现一场返回另一个标志符去解决此问题。

 

4.方法论  在大量复杂页面操作的时候,建议每一步都打印日志文件。

  具体的日志工具可以采用log4j等,具体有以下建议事项

       -设置step全局变量,每走一步,step加1,并且日志文件中打印此步。

       -打印的日志可以使用UEStudio编辑工具进行日志分析。

       -在catch部分打印程序出错行的追踪。具体参考一下代码

StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
String msg = sw.toString();
LOG.error(msg);

-关注信息前后可以使用特殊标识等方便观察

 

以上

你可能感兴趣的:(关于seleium运用中几个问题的总结)