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);
-关注信息前后可以使用特殊标识等方便观察
以上