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. Hbase 学习笔记2----概念

    说在前面,本文部分内容来源于社区官网经过适度翻译,部分根据经验总结,部分是抄袭网络博文,(不一一列举引用,在此致歉)一并列在一起,本文的目的,希望能总结出一些有用的,应该注意到的东西,基本思路是先提出 ...

  2. Java并发(5):同步容器

    一. 同步容器出现的原因 在Java的集合容器框架中,主要有四大类别:List.Set.Queue.Map. List.Set.Queue接口分别继承了Collection接口,Map本身是一个接口. ...

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

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

  4. java 创建包含枚举的常量类

    参考 public class Constants { public static enum ServiceStatus{ NORMAL(1,"正常办理"),CHANGEING(2 ...

  5. PAT 天梯赛 L1-047. 装睡 【水】

    题目链接 https://www.patest.cn/contests/gplt/L1-047 AC代码 #include <iostream> #include <cstdio&g ...

  6. Unity,基于layer的碰撞配置

    可以通过给对象指定layer,实现相同.不同layer之间碰撞的自由配置,比如我们想让怪物之间不碰撞,英雄和怪物之间碰撞,我们就可以这样指定,去掉enemies之间的勾选. 打开方式-edit-> ...

  7. mongodb的安装使用和pymongo基本使用

    (1) mongodb的安装 下载tgz解压后,需要添加相应的环境变量才能在终端直接启动mongod. mongodb数据存储在/data/db中,需要手动创建目录树,同时mongod执行的时候如果权 ...

  8. 字符数组(char)和字符串(string)的转换

    #include<iostream>#include<string>using namespace std;void main(){ string LyuS = "W ...

  9. Docker在渗透中的应用

    起因 环境因素影响,我他么路由器映射端口 msf就是反弹不回来session,在跟大牛交流后,大牛说服务器装个kali就行了,我以为是叫idc那边直接安装,但是因为这个系统特殊,很多 idc不允许安装 ...

  10. grable编译spring源码并导入eclipse

    1.下载安装gradle, spring 源码构建加入了gradle支持. gradle下载: http://www.gradle.org/downloads ,下载后设置环境变量: GRADLE_H ...