C# Selenium-疑难杂症



C# Selenium-疑难杂症

发现网络上的C#Selenium文章好少,讲问题的就更少了。这个文章主要纪录一些疑难杂症和一些解决办法。本文中所用的是wedDriver 也就是Selenium2

1.StaleElementReferenceException(元素过期异常)

样子下下图;

这里写图片描述

在查找元素后,返回了元素对象的引用,但对象里是一堆异常。这里不会报错,只有调试才能看到,属于一个暗坑呀。。

解决办法:在查找元素前加一个延迟。比如点击后,要获取提示信息。那么应该在点击后延迟一点时间,给页面时间来反应。

2.stale element reference: element is not attached to the page document(过时元素引用:元素未附加到页面文档)

错误如下图:

这里写图片描述

这个错通常出现在找到页面元素,当页面元素变化后没有更新导致的。至于为什么会这样,我推测是元素依附的那个HTML文档是以前的,当没有重新获取,元素对象在新的页面中就消失了,所以会提示找不到了。

解决办法:重新用FindElement()方法找一次

3.no such element: Unable to locate element(没有这样的元素:无法定位元素)

错误下如图:
这里写图片描述
这里写图片描述

元素存在HTML中,但是代码中却报错。这会在页面上是处于隐藏的,当然不能找到拉!
还有一种是路径没有写对。虽然有多种方式,但我不太喜欢用Xpath来定位。Xpath是绝对路径,但我们平时要测试的网页大部分是变化的,那Xpath就需要老修改,不太方便。PS:这里说的变化是开发中修改网页、或是网页更新(百度首页也不可能几年都不变呀)。当HTML被加载后,只要不刷新或是DIV中没有发生网页填充,这时的HTML文档结构是短暂不变的

解决办法:
1.如果确认路径没有错的情况下,一点要模拟鼠标去写代码。比如这里,账户登录不点击的话,忘记密码是不会显示的,就定位不到了。
2.如果是路径的问题,尽量用唯一的去定位。比如连接中的文字(LinkText)、ID这些

未完待续