WebDriver(Selenium2) 常见异常及处理方法

转载地址:1、http://uniquepig.iteye.com/blog/1568197  2、http://blog.csdn.net/fengqingting2/article/details/18302365

Exception NoSuchElementException 
Solutions    
1. Check the locator of your target element. 
2. If the locator is current. Try to wait for page load before find element. 
3. If already wait for long time and always cannot find the element, try to use another type locator. 

Exception  NoSuchWindowException 
Solutions    
1.Check the window’s locator. 
2.Wait page load before find the window. 

参考这篇文章:https://www.jianshu.com/p/d81d8af41504

Exception  NoAlertPresentException 
Solutions  
1.Make sure the alert( javascript pop window not new window) will present. 
2.Wait page load before deal the alert. 

Exception  NoSuchFrameException 
Solutions  
1.Check the frame’s locator. 
2.Check is the frame has some father frame.(if has father frame you should switch to the father frame first) 
3.Make sure switch to the default content before switch to target frame( only for single frame) 

4.Wait page load before switch to frame. 


Exception    UnhandledAlertException 
Solutions
1. Check if there is some alert dialog present. ( JavaScript pop window). And deal with them. 
2. If no javascript pop window present but the exception still occurs. Make sure the developer tools is closed when running automation case. (Because since selenium 2.19. “UnhandledAlertException” added and they think the developer tool is an alert) 

Exception  UnexpectedTagNameException 
Solutions  
1.Check the target element’s html tag name. 
2.Try to wait for page load then initializing the selector. 

Exception  StaleElementReferenceException 
Solutions  
1.Re-find the element again. (Because the element has been refresh.) 

Exception  TimeoutException 
Solutions  
1. Check the expected conditions locator. 

 

2..Increase the wait time. 

 

 

 

***********************************************************************************************************

另一篇解决元素过期的文章如下:

例如我们有一排PageLink:

对应的html为:

<a class="PageLink" title="2" href="/shanghai?pageno=2">2</a>
<a class="PageLink" title="3" href="/shanghai?pageno=3">3</a>
<a class="PageLink" title="4" href="/shanghai?pageno=4">4</a>
<a class="PageLink" title="5" href="/shanghai?pageno=5">5</a>
<a class="PageLink" title="6" href="/shanghai?pageno=6">6</a>
<a class="PageLink" title="7" href="/shanghai?pageno=7">7</a>
<a class="PageLink" title="8" href="/shanghai?pageno=8">8</a>
<a class="PageLink" title="9" href="/shanghai?pageno=9">9</a>
<a class="PageLink" title="10" href="/shanghai?pageno=10">10</a>

原本在构造函数中通过driver.findElements(By.xpath("//a[@class = 'PageLink')来存储所有的PageLink到一个List<WebElement>中,然后通过Iterator.Next()的方式遍历所有PageLink页。

 

但在第三页就出现异常:提示

org.openqa.selenium.StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up

 

因此可以看出,在经过一次点击后,原有PageLink已经失效。需要重新获取。

其原因在于,点击过一次PageLink后,会重新刷新并生成新PageLink,当前页的PageLink不会显示。

 

因此解决方法是设定了两个参数

private Integer currentPageLinkNumber = 1;
private Integer MaxPage = 10;//Max page links number

然后通过:

while(currentPageLinkNumber<MaxPage)
{
     WebElement PageLink;
     PageLink = driver.findElement(By.xpath("//a[@class = 'PageLink' and @title ='"+Integer.toString(currentPageLinkNumber+1)+"']"));
      PageLink.click();
      currentPageLinkNumber++;

//OtherOperation();
}

的方式进行迭代。

虽然感觉很麻烦就是- -

要很小心的注意同步currentPageLinkNumber和当前的PageLink啊- -

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值