The most common exceptions and their solutions:

NoAlertPresentException

Indicates that a user has tried to access an alert when one is not present.

((JavascriptExecutor) driver).executeScript("alert()");
WebDriverWait wait = new WebDriverWait(driver.getDriver(), 15);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
alert.accept();

More methods to work with alerts here.

NoSuchWindowException

Thrown by WebDriver.switchTo().window(String windowName).
If you get it in IE. Try to specify
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);

Or you will have to switch to another window using correct method.

NoSuchElementException

Thrown by WebDriver.findElement(By by) and WebElement.findElement(By by).
Sometimes it happens when your element is located in another iframe. And you'll need to first switch to the iframe element that contains the element that you want to interact with:

driver.switchTo().frame();
eg:

driver.switchTo().frame(1); driver.switchTo().frame(driver.findElement(By.id("id")));
When you've finished interacting with the elements within the frame, you'll need to switch back to the main webpage.
driver.switchTo().defaultContent();

Or you will have to wait for your element will be clickable:

/**
* elementToBeClickable(WebElement element)
*An expectation for checking an element is visible and enabled such that you can click it.
*/
protected boolean validateElementClickable(final By by) {
try{
new WebDriverWait(driver.getDriver(),15).until(ExpectedConditions.elementToBeClickable(by));
}catch(RuntimeException e){
return false;
}
return true;
}

ElementNotVisibleException: element not visible

You will have to wait for your element will be visible:

public boolean validateElementClickable(final By by) {
try{
new WebDriverWait(driver, 15).until(ExpectedConditions.elementToBeClickable(by));
}catch(RuntimeException e){
return false;
}
return true;
}

Stale Element Reference Exception

A stale element reference exception is thrown in one of two cases, the first being more common than the second:

The element has been deleted entirely.
The most frequent cause of this is that page that the element was part of has been refreshed, or the user has navigated away to another page.If the element has been replaced with an identical one, a useful strategy is to look up the element again.

The element is no longer attached to the DOM.it's entirely possible that your code might have a reference to an element that is no longer attached to the DOM. You should discard the current reference you hold and replace it, possibly by locating the element again once it is attached to the DOM.

To solve it you can wait for your element become visible:

public boolean validateElementVisible(final By by) {
try{
new WebDriverWait(driver, 15).until(ExpectedConditions.visibilityOfElementLocated(by));
}catch(RuntimeException e){
return false;
}
return true;
}

SeleniumWatchDog destroyHarder

Instead of driver.quit(); try:
driver.close();
Runtime.getRuntime().exec("taskkill /F /IM chromedriver.exe");
Runtime.getRuntime().exec("taskkill /F /IM firefox.exe");
driver.quit();

Close() - It is used to close the browser or page currently which is having the focus.
Quit() - It is used to shut down the web driver instance

If you get exception like “org.openqa.selenium.WebDriverException: unknown error: unhandled inspector error: {"code":-32603,"message":"Cannot navigate to invalid URL"}”

That means that you specified the incorrect url like (without protocol maybe) like:

driver.get("www.google.com");

You will have to change it to:

driver.get("https://google.com");

UnreachableBrowserException

Indicates there was a problem communicating with the browser being controlled or the Selenium server. The most common causes for this exception are:

  • The provided server address to RemoteWebDriver is invalid, so the connection could not be established.
  • The browser has died mid-test.

Check that you have the latest version of webdriver http://www.seleniumhq.org/download/

Check where you use drver.close();

Check if the "close" comes before the @AfterClass is called.

UnhandledAlertException

That means that your test faced unpredictable Alert.

You will have to handle it using special methods below..

Some useful methods for alerts:

protected String getAlertText() {
// Get a handle to the open alert, prompt or confirmation
Alert alert = driver.getDriver().switchTo().alert();
// Get the text of the alert or prompt
return alert.getText();
}

public void clickOkInAlert() {
Assert.assertTrue(validateAlertPresent(), "The alert is not present");
// Get a handle to the open alert, prompt or confirmation
Alert alert = driver.getDriver().switchTo().alert();
// Get the text of the alert or prompt
System.out.println("alert: " + alert.getText());
// And acknowledge the alert (equivalent to clicking "OK")
alert.accept();
}

public boolean validateAlertPresent() {
try{
new WebDriverWait(driver, 15).until(ExpectedConditions.alertIsPresent());
}catch(RuntimeException e){
return false;
}
return true;
}

WebDriverException: unknown error: Element is not clickable at point

Try to use instead of driver.findElement(by).click() use:

Actions actions = new Actions(driver);
actions.click(driver.findElement(by)).build().perform();

Timed out receiving message from renderer

Try to use older version of chromedriver (for example instead of using 15th use 12th)

How to handle your webdriver exceptions的更多相关文章

  1. Java+selenium之WebDriver常见特殊情况如iframe/弹窗处理(四)

    1. iframe 的处理 查找元素必须在对应的 ifarme 中查找,否则是找不到的 // 传入参数为 frame 的序号,从0开始 driver.switchTo().frame(Int inde ...

  2. selenium webdriver学习(六)------------如何得到弹出窗口

    selenium webdriver学习(六)------------如何得到弹出窗口 在selenium 1.X里面得到弹出窗口是一件比较麻烦的事,特别是新开窗口没有id.name的时候.当时还整理 ...

  3. 揭秘Windows10 UWP中的httpclient接口[2]

    阅读目录: 概述 如何选择 System.Net.Http Windows.Web.Http HTTP的常用功能 修改http头部 设置超时 使用身份验证凭据 使用客户端证书 cookie处理 概述 ...

  4. Gulp探究折腾之路(I)

    前言: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快的编写代码 ...

  5. Programming Entity Framework 翻译(1)-目录

    1. Introducing the ADO.NET Entity Framework ado.net entity framework 介绍 1 The Entity Relationship Mo ...

  6. Selenium 代码收集

    [转载]使用Selenium2测试含有iframe的Ajax网页  原文地址:http://www.cnblogs.com/hexin0614/archive/2012/03/24/2415670.h ...

  7. Gulp探究折腾之路(I)2

    文/晚晴幽草(简书作者)原文链接:http://www.jianshu.com/p/9768a4dc7cf7著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 前言: gulp是前端开发过 ...

  8. 1、揭秘通用平台的 HttpClient (译)

    原文链接:Demystifying HttpClient APIs in the Universal Windows Platform 正打算翻译这篇文章时,发现园子里已经有朋友翻译过了,既然已经开始 ...

  9. Growing Pains for Deep Learning

    Growing Pains for Deep Learning Advances in theory and computer hardware have allowed neural network ...

随机推荐

  1. 美国评出2016最值得去的旅游胜地+纯电动车郊游记+DIY一个小电动车

    美国评出2016最值得去的旅游胜地(10) http://bbs.miercn.com/bd/201510/thread_569397_1_10.html 自带发电机! 北汽E150 EV纯电动车郊游 ...

  2. python识别验证码

    1.tesseract-ocr安装 tesseract-ocr windows下载地址 http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr- ...

  3. python 中的 re.compile 函数(转)

    1. 使用re.compile re模块中包含一个重要函数是compile(pattern [, flags]) ,该函数根据包含的正则表达式的字符串创建模式对象.可以实现更有效率的匹配.在直接使用字 ...

  4. 【转】Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  5. ReportView 添加自动增长序号

    在显示序号的列中输入相关的值: 在此表达式的后面是Nothing,不是null,不要搞错.

  6. Python框架之Tornado (源码之褪去模板外衣)

    上一篇介绍了客户端请求在tornado框架中的生命周期,其本质就是利用epoll和socket来获取并处理请求.在上一篇的内容中,我们只是给客户端返回了简单的字符串,如:“Hello World”,而 ...

  7. HDU 6356 Glad You Came 2018 Multi-University Training Contest 5 (线段树)

    题目中没有明说会爆int和longlong 的精度,但是在RNG函数中不用unsigned int 会报精度,导致队友debug了很久... 根据每次生成的l,r,v对区间更新m次,然后求 i*ai的 ...

  8. 【笔记】H5自适应(待)

    参考: 1.盒子模型:http://www.cnblogs.com/sunyunh/archive/2012/09/01/2666841.html 2.浮动:http://www.w3school.c ...

  9. Maven的简介

    1 What? 1.1 Maven 简介Maven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和依赖管理.Maven 这个单词的本意是:专家,内行. ...

  10. java实现定时任务的三种方法 - 转载

    java实现定时任务的三种方法 /** * 普通thread * 这是最常见的,创建一个thread,然后让它在while循环里一直运行着, * 通过sleep方法来达到定时任务的效果.这样可以快速简 ...