【原创】Selenium学习系列之(五)—从Selenium 到 Selenium2(Webdriver)
2017-08-24 13:36
344 查看
通过前面四期,大家对Selenium应该有了初步的了解,它是一个强大的基于浏览器的开源自动化测试工具。在使用一段时间后,你会觉得Selenium确实是一个很不错的Web测试工具,它使用灵活简单,上手快,而且写出的测试case非常简洁,并且支持多个编程语言。
但Selenium并不是能够在浏览器中自动化功能测试的唯一工具。由SimonStewart创建的webdriver是一个具有类似目标的项目。要控制浏览器,需要依赖采用本机支持的独立客户端。webdriver仅提供java绑定,并不能支持Selenium1所能支持的那么多浏览器。这样就有了Selenium2的出现,接下来我们聊一聊Selenium2。
Selenium2的由来
Selenium 2(又名 WebDriver),简单来说Selenium2.0=Selenium1.0+webdriver,结合了Selenium1和webdriver中的最佳特性。
那 Selenium 团队为什么会将两个项目合并呢?以下这段,摘自于网上比较官方的说法。
我们通常认为其中部分原因是 WebDriver 解决了 Selenium 存在的缺点(比如,能够绕过 JS 沙箱,这个),部分原因是 Selenium 解决了 WebDriver 存在的问题(比如,支持更广泛的浏览器和编程语言),不论真正的原因是什么两个项目的合并为用户提供了一个优秀的自动化测试框架。它具有来自webdriver的清晰面向对象API,并且能以最佳的方式与浏览器进行交互,它支持多种浏览器和多语言绑定。Selenium2还提供基于htmlunit的无外设驱动,是用于测试web应用程序的java框架。htmlunit运行速度特别快,但它不是一个真正与真实浏览器相关联的驱动。
我切身的使用感受是,Selenium2(以下统称webdriver)比Selenium1(以下统称Selenium)简单方便,脚本易维护,我们在使用中可以将Selenium可以作为上手实践,然后逐渐过渡到Webdriver。
Selenium无法自定义testcase执行顺序,只能按照自上而下的顺序执行,而且它的结构只能是 test suite-test case的两层关系,不能实现更多层次的结构,如 test suite-test suite –test case。
目前Selenium2为下列程序提供驱动程序:
Mozilla Firefox
Google Chrome
Microsoft Internet Explorer
Opera
Apple iPhone
Android browsers
说了这么多,有没有想要体验一把的冲动,那么先从搭建环境开始吧。
Eclipse中配置webdriver
我们需要下载和安装程序
Eclipse
JRE
Selenium-server( e.g.Selenium-server-2.39.0.zip)
All variants of the Selenium Server: stand-alone, jar with dependencies and sources.
Selenium-server-standalone(e.g.Selenium-server-standalone-2.39.0.jar) Use this if you want to use the Selenium RC or Remote WebDriver or use Grid 2 without needing any additional dependencies
IEDriverServer(e.g. IEDriverServer_x64_2.39.0)
我使用的Eclipse和JRE都是绿色版免安装版,需要注意的,两者的bit要一致,如果使用的是64bit的Eclipse,则JRE也需要是64bit。Selenium的两个jar包和IEDriverServer都可以去Selenium官网下载(http://www.seleniumhq.org/)
接下来将Selenium-server 和Selenium-server-standalone 两个文件copy到某一目录下,(例如 D:\mySoftware\eclipse_j2ee\eclipse_j2ee\plugins)
接着解压IEDriverServer并将其放到某一目录下(如 D:\mySoftware\IEDriverServer\IEDriverServer.exe),这个目录我们后面会用到的,需要记住的。
在Eclipse 新建JavaProject,命名为 SeleniumBlog。
对新建的Project,configure build path,导入两个Selenium jar包,IEDriverServer 和Junit4。
在SeleniumIDE新建 login test case,并将其导出为 Java/Junit/Webdriver。
在Eclipse新建firstTest.java,将导出的Java/Junit/Webdriver,粘贴过来。然后,我们需要对代码进行微调,原因如下:
导出的code默认用 Firefox DriverServer,而我们要使用IE DriverServer
IE Driver Server的path,需要定义一下,否则它会默认寻找C:\Program Files\Internet Explorer,如果这个路径下找不到的话,则无法启动IE 的Driver,运行报错
有可能你的IE是兼容模式,所以需要通过代码设定一下,否则运行会报错
在firstTest.java, 点选右键,选择 run as-Junit, 然后静待结果吧。如果,看到下面的结果,那么恭喜你,运行成功。Keep the code clean, keep the bar green。
附:微调后并运行通过的代码
package Test;
import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.Select;
public class firstTest {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
@Before
public void setUp() throws Exception {
//Set environment variable for “webdriver.ie.driver” though system.setProperty method.
System.setProperty(“webdriver.ie.driver”, “D:\\mySoftware\\IEDriverServer\\IEDriverServer.exe”);
//The below setting must be done if IE setting in Protected mode
DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();
ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);
driver = new InternetExplorerDriver(ieCapabilities);
// driver = new InternetExplorerDriver();
baseUrl = “http://10.237.89.182:8080/”;
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
public void testLoginJunit4WebDriver() throws Exception {
driver.get(baseUrl + “/ecc/”);
driver.findElement(By.id(“txtLogin”)).clear();
driver.findElement(By.id(“txtLogin”)).sendKeys(“global”);
driver.findElement(By.name(“password”)).clear();
driver.findElement(By.name(“password”)).sendKeys(“Pw#12346”);
driver.findElement(By.xpath(“//input[@value=’LOGIN’]”)).click();
try {
assertEquals(“Welcome,”, driver.findElement(By.cssSelector(“span.welcome”)).getText());
} catch (Error e) {
verificationErrors.append(e.toString());
}
driver.findElement(By.id(“btnLogout”)).click();
}
@After
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!””.equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
private boolean isAlertPresent() {
try {
driver.switchTo().alert();
return true;
} catch (NoAlertPresentException e) {
return false;
}
}
private String closeAlertAndGetItsText() {
try {
Alert alert = driver.switchTo().alert();
String alertText = alert.getText();
if (acceptNextAlert) {
alert.accept();
} else {
alert.dismiss();
}
return alertText;
} finally {
acceptNextAlert = true;
}
}
}
但Selenium并不是能够在浏览器中自动化功能测试的唯一工具。由SimonStewart创建的webdriver是一个具有类似目标的项目。要控制浏览器,需要依赖采用本机支持的独立客户端。webdriver仅提供java绑定,并不能支持Selenium1所能支持的那么多浏览器。这样就有了Selenium2的出现,接下来我们聊一聊Selenium2。
Selenium2的由来
Selenium 2(又名 WebDriver),简单来说Selenium2.0=Selenium1.0+webdriver,结合了Selenium1和webdriver中的最佳特性。
那 Selenium 团队为什么会将两个项目合并呢?以下这段,摘自于网上比较官方的说法。
我们通常认为其中部分原因是 WebDriver 解决了 Selenium 存在的缺点(比如,能够绕过 JS 沙箱,这个),部分原因是 Selenium 解决了 WebDriver 存在的问题(比如,支持更广泛的浏览器和编程语言),不论真正的原因是什么两个项目的合并为用户提供了一个优秀的自动化测试框架。它具有来自webdriver的清晰面向对象API,并且能以最佳的方式与浏览器进行交互,它支持多种浏览器和多语言绑定。Selenium2还提供基于htmlunit的无外设驱动,是用于测试web应用程序的java框架。htmlunit运行速度特别快,但它不是一个真正与真实浏览器相关联的驱动。
我切身的使用感受是,Selenium2(以下统称webdriver)比Selenium1(以下统称Selenium)简单方便,脚本易维护,我们在使用中可以将Selenium可以作为上手实践,然后逐渐过渡到Webdriver。
Selenium无法自定义testcase执行顺序,只能按照自上而下的顺序执行,而且它的结构只能是 test suite-test case的两层关系,不能实现更多层次的结构,如 test suite-test suite –test case。
目前Selenium2为下列程序提供驱动程序:
Mozilla Firefox
Google Chrome
Microsoft Internet Explorer
Opera
Apple iPhone
Android browsers
说了这么多,有没有想要体验一把的冲动,那么先从搭建环境开始吧。
Eclipse中配置webdriver
我们需要下载和安装程序
Eclipse
JRE
Selenium-server( e.g.Selenium-server-2.39.0.zip)
All variants of the Selenium Server: stand-alone, jar with dependencies and sources.
Selenium-server-standalone(e.g.Selenium-server-standalone-2.39.0.jar) Use this if you want to use the Selenium RC or Remote WebDriver or use Grid 2 without needing any additional dependencies
IEDriverServer(e.g. IEDriverServer_x64_2.39.0)
我使用的Eclipse和JRE都是绿色版免安装版,需要注意的,两者的bit要一致,如果使用的是64bit的Eclipse,则JRE也需要是64bit。Selenium的两个jar包和IEDriverServer都可以去Selenium官网下载(http://www.seleniumhq.org/)
接下来将Selenium-server 和Selenium-server-standalone 两个文件copy到某一目录下,(例如 D:\mySoftware\eclipse_j2ee\eclipse_j2ee\plugins)
接着解压IEDriverServer并将其放到某一目录下(如 D:\mySoftware\IEDriverServer\IEDriverServer.exe),这个目录我们后面会用到的,需要记住的。
在Eclipse 新建JavaProject,命名为 SeleniumBlog。
对新建的Project,configure build path,导入两个Selenium jar包,IEDriverServer 和Junit4。
在SeleniumIDE新建 login test case,并将其导出为 Java/Junit/Webdriver。
在Eclipse新建firstTest.java,将导出的Java/Junit/Webdriver,粘贴过来。然后,我们需要对代码进行微调,原因如下:
导出的code默认用 Firefox DriverServer,而我们要使用IE DriverServer
IE Driver Server的path,需要定义一下,否则它会默认寻找C:\Program Files\Internet Explorer,如果这个路径下找不到的话,则无法启动IE 的Driver,运行报错
有可能你的IE是兼容模式,所以需要通过代码设定一下,否则运行会报错
在firstTest.java, 点选右键,选择 run as-Junit, 然后静待结果吧。如果,看到下面的结果,那么恭喜你,运行成功。Keep the code clean, keep the bar green。
附:微调后并运行通过的代码
package Test;
import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.Select;
public class firstTest {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
@Before
public void setUp() throws Exception {
//Set environment variable for “webdriver.ie.driver” though system.setProperty method.
System.setProperty(“webdriver.ie.driver”, “D:\\mySoftware\\IEDriverServer\\IEDriverServer.exe”);
//The below setting must be done if IE setting in Protected mode
DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();
ieCapabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true);
driver = new InternetExplorerDriver(ieCapabilities);
// driver = new InternetExplorerDriver();
baseUrl = “http://10.237.89.182:8080/”;
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
public void testLoginJunit4WebDriver() throws Exception {
driver.get(baseUrl + “/ecc/”);
driver.findElement(By.id(“txtLogin”)).clear();
driver.findElement(By.id(“txtLogin”)).sendKeys(“global”);
driver.findElement(By.name(“password”)).clear();
driver.findElement(By.name(“password”)).sendKeys(“Pw#12346”);
driver.findElement(By.xpath(“//input[@value=’LOGIN’]”)).click();
try {
assertEquals(“Welcome,”, driver.findElement(By.cssSelector(“span.welcome”)).getText());
} catch (Error e) {
verificationErrors.append(e.toString());
}
driver.findElement(By.id(“btnLogout”)).click();
}
@After
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!””.equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
private boolean isAlertPresent() {
try {
driver.switchTo().alert();
return true;
} catch (NoAlertPresentException e) {
return false;
}
}
private String closeAlertAndGetItsText() {
try {
Alert alert = driver.switchTo().alert();
String alertText = alert.getText();
if (acceptNextAlert) {
alert.accept();
} else {
alert.dismiss();
}
return alertText;
} finally {
acceptNextAlert = true;
}
}
}
相关文章推荐
- selenium2.0&WebDriver学习系列(一些需要注意的知识点)
- selenium webdriver 学习总结-数据驱动(六)
- Selenium + Webdriver 学习(六) 自动选择、检查下拉列表
- Selenium2.0之WebDriver学习总结(2)
- selenium webdriver学习(十五)------------如何处理FirefoxProfile
- 【Selenium学习笔记】Webdriver工作原理
- selenium 2.0 webdriver 学习笔记(二)
- selenium webdriver学习(九)------------如何操作cookie
- selenium webdriver 学习总结-Selenium 控制测试流(五)-补充显示等待
- selenium+webDriver环境搭建和学习基础(java环境)
- selenium webdriver学习(十三)------------如何利用Actions类模拟鼠标和键盘的操作
- selenium webdriver 学习总结-JUnit4 入门_补充枚举 (三)
- Selenium Webdriver 学习
- Selenium Webdriver 学习总结-Advanced Usage-Cookie、Profile(七)
- selenium webdriver学习(八)------------如何操作select下拉框(转)
- Selenium + Webdriver 学习(六) 自动选择、检查下拉列表。
- selenium学习之Selenium Webdriver元素定位的八种常用方式
- selenium webdriver学习(六)------------如何得到弹出窗口
- selenium webdriver学习(二十一)------------Selenium Grid深入学习
- selenium webdriver 学习总结-元素定位(一)