利用selenium Server实现IE firefox 和 chrome兼容性测试
本文的主题是基于Selenium Server,使用 Java 语言编写网页交互流程,
实现多浏览器(IE Firefox Chrome)兼容性测试,为使用纪要。
Selenium
Selenium是一套浏览器自动化测试工具(http://www.seleniumhq.org/),
其中Selenium IDE为火狐的一个插件,此插件可以实现火狐浏览器上用户操作的录制和回放功能,
但是录制结果不能再其他浏览器上验证。
幸好其可以导出 JUnit框架等的测试代码,让其可以再其他浏览器上执行。
JUnit
是一个单元测试框架,官网见下:
https://github.com/junit-team/junit
博客园上有使用介绍博文:
http://www.cnblogs.com/mengdd/archive/2013/03/26/2983565.html
准备:
1、下载eclipse, 其自带junit。 下载地址 www.Eclipse.org
2、下载Selenium Server 和 Java Client Driver, 下载地址 http://docs.seleniumhq.org/download/
http://selenium-release.storage.googleapis.com/2.41/selenium-server-standalone-2.41.0.jar
http://selenium-release.storage.googleapis.com/2.41/selenium-java-2.41.0.zip
3、下载IE Driver,
http://selenium-release.storage.googleapis.com/2.41/IEDriverServer_Win32_2.41.0.zip
4、下载Chrome Driver,
http://chromedriver.storage.googleapis.com/index.html
http://chromedriver.storage.googleapis.com/2.10/chromedriver_win32.zip
安装配置:
1、启动eclipse,
创建SeleniumTest工程,
创建包 com.selenium.test.junitcode,
创建类 seleniumTestJunit.java
将 Selenium IDE导出的JUnit代码放到此类中,
此代码中只支持Firefox,后面给出代码支持 IE 和 Chrome。
2、选择工程, 右键, Build Path -》 Add Library,选择 Junit, 点击next finish。
3、选择工程, 右键, Build Path -》 Config Build Path,Library 标签页, 点击 Add External Jars,
添加Selenium Server 和 Java Client Driver
4、IE 和 Chrome Driver解压到目录:
C:\\Documents and Settings\\Administrator\\桌面\\seleniumtest\\
运行:
点击开始按钮,依次执行指令,本例中为打开 Baidu页,搜索“母亲节”, 分别执行 firefox chrome 和 IE。
其中,testCases为填充测试用例函数。
如下对于每个浏览器都执行下面类似三句,有重复语句,扩展性也不好;
本想使用数组容纳函数, 循环执行, 可惜Java不支持,请Java大侠指点。
prepareFirefoxDriver();
testCases();
testover();
package com.selenium.test.junitcode; import java.io.File;
import java.util.Iterator;
import java.util.List;
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.chrome.ChromeDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.support.ui.Select; public class seleniumTestJunit {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer(); @Before
public void setUp() throws Exception {
baseUrl = "http://www.baidu.com";
} private void prepareIEDriver(){
/* IE driver */
File file = new File("C:\\Documents and Settings\\Administrator\\桌面\\seleniumtest\\IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
driver = new InternetExplorerDriver(); driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
} private void prepareFirefoxDriver(){
/* firefox driver */
driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
} private void prepareChromeDriver(){
File file = new File("C:\\Documents and Settings\\Administrator\\桌面\\seleniumtest\\chromedriver.exe");
System.setProperty("webdriver.chrome.driver", file.getAbsolutePath());
driver = new ChromeDriver();
} private void testCases() throws Exception {
driver.get(baseUrl);
Thread.sleep(1000);
driver.findElement(By.id("kw1")).clear();
driver.findElement(By.id("kw1")).sendKeys("母亲节");
Thread.sleep(1000);
driver.findElement(By.id("su1")).click();
Thread.sleep(3000);
} public void testover() throws Exception {
driver.close();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
} @Test
public void testTt() throws Exception { prepareFirefoxDriver();
testCases();
testover(); prepareChromeDriver();
testCases();
testover(); prepareIEDriver();
testCases();
testover();
} @After
public void tearDown() throws Exception { }
}
附录问题查证记录:
如果IE运行中遇到如下打印, 请退出360安全卫士:
org.openqa.selenium.remote.SessionNotFoundException: Unexpected error launching Internet Explorer. IELaunchURL() returned HRESULT ('参数不正确。') for URL 'http://localhost:48104/' (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 5.84 seconds
附录支持Selenium IDE导出JUnit代码:
package com.example.tests; 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.support.ui.Select; public class Seleniumbaidutest {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer(); @Before
public void setUp() throws Exception {
driver = new FirefoxDriver();
baseUrl = "http://www.baidu.com/";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
} @Test
public void testSeleniumbaidu() throws Exception {
driver.get(baseUrl + "/");
driver.findElement(By.id("su")).click();
driver.findElement(By.id("su1")).click();
driver.findElement(By.id("kw1")).clear();
driver.findElement(By.id("kw1")).sendKeys("母亲节");
driver.findElement(By.id("su1")).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 Server实现IE firefox 和 chrome兼容性测试的更多相关文章
- Selenium 设置浏览器下载 Firefox 和Chrome
当我们在使用Selenium运行自动化测试时,偶尔需要用到下载功能,但浏览器的下载可能会弹出下载窗口,或者下载路径不是我们想要保存的位置,所以在通过Selenium启动浏览器时需要做相关的设置,将使这 ...
- python selenium自动化测试之路(1)--分层测试概念、selenium工具介绍
1.分层自动化测试概念 传统的自动化市场更关注产品UI层的自动化测试,而分层的自动化测试倡导产品开发的不同阶段都需要自动化测试 大多公司与研发团队其实是忽略了单元测试与集成测试阶段的自动化测试工作,所 ...
- [Python爬虫] Selenium自动访问Firefox和Chrome并实现搜索截图
前两篇文章介绍了安装,此篇文章算是一个简单的进阶应用吧!它是在Windows下通过Selenium+Python实现自动访问Firefox和Chrome并实现搜索截图的功能. [Pyth ...
- 【转】利用 selenium 的 webdrive 驱动 headless chrome
1.参考 使用 headless chrome进行测试 2.概念 Headless模式解决了什么问题: 自动化工具例如 selenium 利用有头浏览器进行测试,面临效率和稳定性的影响,所以出现了 H ...
- [Python爬虫] Selenium自己主动訪问Firefox和Chrome并实现搜索截图
前两篇文章介绍了安装.此篇文章算是一个简单的进阶应用吧.它是在Windows下通过Selenium+Python实现自己主动訪问Firefox和Chrome并实现搜索截图的功能. [Python爬虫] ...
- Selenium+Python:下载文件(Firefox 和 Chrome)
引自 https://blog.csdn.net/Momorrine/article/details/79794146 1. 环境 操作系统 Win10 IDE Eclipse (Oxyg ...
- 【python爬虫】利用selenium和Chrome浏览器进行自动化网页搜索与浏览
功能简介:利用利用selenium和Chrome浏览器,让其自动打开百度页面,并设置为每页显示50条,接着在百度的搜索框中输入selenium,进行查询.然后再打开的页面中选中“Selenium - ...
- 重装系统后,重新搭建Selenium Server+Firefox环境
摘要:搭建Selenium自动化测试环境其实是非常简单的事情,在态度上我们不要把它当成难事:折腾起来是很愉快的,自然就成功了. 下面把这次安装的过程记录下来,一来是加深印象,二来可以给大家提供参考. ...
- 利用Selenium自动化web测试
简介: Selenium 是一个没有正式指导手册的开源项目,这让测试人员的问题调查很费时间.本文为基于 Selenium 1.0(发布于 2009 年 6 月)的测试期间的常见问题提供最佳实践. 简介 ...
随机推荐
- PHP 设计模式 笔记与总结(5)PHP 魔术方法的使用
PHP 魔术方法的使用 ① __get/__set:将对象的属性进行接管 当访问一个不存在的对象属性时: index.php <?php define('BASEDIR',__DIR__); / ...
- maven中GroupID 和ArtifactID怎么写
groupId :the unique identifier of the organization or group that created the project artifactId :uni ...
- 20个C语言中常用宏定义总结
01: 防止一个头文件被重复包含 #ifndef COMDEF_H#define COMDEF_H//头文件内容#endif 02: 重新定义一些类型防止由于各种平台和编译器的不同,而产生的类型字节数 ...
- Java内存管理和垃圾回收
笔记,深入理解java虚拟机 Java运行时内存区域 程序计数器,线程独占,当前线程所执行的字节码的行号指示器,每个线程需要记录下执行到哪儿了,下次调度的时候可以继续执行,这个区是唯一不会发生oom的 ...
- [收藏]NET技术+25台服务器怎样支撑世界第54大网站
.NET技术+25台服务器怎样支撑世界第54大网站 英文原文:StackOverflow Update: 560M Pageviews A Month, 25 Servers, And It's ...
- random and password 在Linux下生成crypt加密密码的方法,shell 生成指定范围随机数与随机字符串
openssl rand -hex n (n is number of characters) LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head ...
- python 十进制 十六进制
把十六进制的字串转为十进制数字:>>> print int('ff', 16) 255 把十进制数字转换为以十六进制表示之字串,可调用内置的hex()函数:>>> ...
- win环境下,用虚拟化工具打包Qt动态编译exe的过程(使用Enigma Virtual Box)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://goldlion.blog.51cto.com/4127613/834075 引子 ...
- 规则html表单对象赋值
function grid_load_callback(data, status) { if (data.rows.length > 0) { ...
- Prism&MEF构建开发框架
系统框架构想效果图 平台简单由左侧菜单和右侧内容区以及顶部系统和用户信息区构成 菜单根据系统模块动态加载 右侧,根据左侧选中菜单动态加载子模块,子模块集合以tab选项卡方式布局 系统模块划分为Shel ...