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. Python(输入、输出;简单运算符;流程控制;转译)

    一 输入输出 python3中统一都是input,python2中有raw_input等同于python3的input,另外python2中也有input 1.res=input("pyth ...

  2. zend studio设置utf8

    1. windows -> preference -> general -> workspace 2.项目右键 -> properities -> resource 3. ...

  3. React:快速上手(5)——掌握Redux(2)

    React:快速上手(5)——掌握Redux(2) 本文部分内容参考阮一峰的Redux教程. React-Redux原理 React-Redux运行机制 我觉得这张图清楚地描述React-Redux的 ...

  4. 解锁CHM文件

    刚在网上下载了CHM格式的文件,打开之后,右侧部分一片空白. 原因:可能是,系统针对来源不明文件的一种保存措施吧 解决方法: 1.选中文件,右键打开属性对话框,在 “常规”选项卡中 勾选 [解除锁定] ...

  5. 使用Socket&反射&Java流操作进行方法的远程调用(模拟RPC远程调用)

    写在前面 阅读本文首先得具备基本的Socket.反射.Java流操作的基本API使用知识:否则本文你可能看不懂... 服务端的端口监听 进行远程调用,那就必须得有客户端和服务端.服务端负责提供服务,客 ...

  6. vs2012编译cocos2dx 3.10报错解决方法

    新建的一个cocos工程没有改过任何代码直接编译居然报错了? 百度了一下原来是因为vs2012不支持c++11的部分特性 cocos2dx 3.10正好就用到了vs2012不支持的那部分特性,所以报错 ...

  7. 【Head First Servlets and JSP】笔记22:直接从请求到JSP & 获取Person的嵌套属性

    直接从请求到JSP,不经过servlet <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  8. 介绍Web项目中用到的几款JS日历日期控件和JS文本编辑框插件

    第一款日历日期控件:layDate 官方网站:http://laydate.layui.com/ 第二款日历日期控件:my97 官方网站:http://www.my97.net/ 第三款 文本编辑器控 ...

  9. 安装pycurl

    环境:ubuntu 1604 安装 pycurl 遇到一些问题 简单记录 1.安装 pippython2:apt install python-pippython3: apt install pyth ...

  10. vue路由两种传参的区别

    //定义路由 { path:"/detail", name:"detail", component:home } //这种做法是错误的,这是query传参的方式 ...