Web 自动化测试
Selenium 名字的来源
在这里,我还想说一下关于 Selenium 名字的来源,很有意思的 : > : Selenium 的中文名为 “ 硒 ” ,是一种化学元素的名字,它 对 汞 ( Mercury )有天然的解毒作用,实验表明汞暴露水平越高,硒对汞毒性的拮抗作用越明显,所以说硒是汞的克星。大家应该知道 Mercury 测试工具系 列吧( QTP , QC , LR , WR... ),他们功能强大,但却价格不菲,大家对此又爱又恨!故 thoughtworks 特意把他们的 Web 开源测试工具命 名为 Selenium ,以此帮助大家脱离汞毒。
产品类别
|
Selenium IDE |
一个用于构造测试脚本的原型工具。它是一个Firefox插件,并且提供了一个易于使用的开发自动化测试的接口。Selenium IDE有一个录制功能,可以记录用户执行的动作,然后可以导出它们作可重用的脚本 |
|
Remote Control |
Selenium RC是最重要的Seleniumx项目,在WebDriver/Selenium合并产生Selenium 2 |
|
WebDriver |
Selenium 2是该项目的未来方向,和对Selenium工具包的最新的增加物。 |
|
Grid |
如果你必须运行你的测试集在多个环境,你可以有不同的远程机器的支持和运行你的测试在同一时间在不同的远程机器上。在任何一种情形下,Selenium都将充分利用并行处理,极大地改善运行你的测试所花费的时间。 |
浏览器支持
官方文档 http://docs.seleniumhq.org/docs/01_introducing_selenium.jsp#supported-browsers-and-platforms
实战操作
准备
IE Chrome的Driver安装和准备
https://code.google.com/p/selenium/wiki/ChromeDriver
https://code.google.com/p/selenium/wiki/InternetExplorerDriver
RemoteControl的不同浏览器Java代码
package base;
import org.openqa.selenium.*;
import org.openqa.selenium.ie.*;
import org.openqa.selenium.remote.*;
import static org.testng.Assert.*;
import org.testng.annotations.*;
import com.thoughtworks.selenium.Selenium;
import java.io.*;
import java.net.*;
public class BaseRC {
protected Selenium selenium;
private WebDriver driver = null;
private StringBuffer verificationErrors = new StringBuffer();
@Parameters({ "platform", "browser", "version", "url" })
@BeforeTest(alwaysRun = true)
public void setup(String platform, String browser, String version,
String url) throws MalformedURLException, IOException {
DesiredCapabilities caps = null;
// Browsers
if (browser.equalsIgnoreCase("Internet Explorer")) {
System.setProperty("webdriver.ie.driver",
"c:\\test\\IEDriverServer.exe");
caps = DesiredCapabilities.internetExplorer();
// IE安全设置
caps.setCapability( InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
true);
// browser zoom level must be set to 100%
} else if (browser.equalsIgnoreCase("Firefox")) {
System.setProperty("webdriver.firefox.bin",
"C:\\test\\Firefox4\\firefox.exe");
caps = DesiredCapabilities.firefox();
} else if (browser.equalsIgnoreCase("chrome")) {
System.setProperty("webdriver.chrome.driver",
"c:\\test\\chromedriver.exe");
caps = DesiredCapabilities.chrome();
caps.setCapability(
"chrome.binary",
"C:\\test\\Chrome31\\chrome.exe");
} else if (browser.equalsIgnoreCase("iPad"))
caps = DesiredCapabilities.ipad();
else if (browser.equalsIgnoreCase("Android"))
caps = DesiredCapabilities.android();
// Platforms
if (platform.equalsIgnoreCase("Windows"))
caps.setPlatform(org.openqa.selenium.Platform.WINDOWS);
else if (platform.equalsIgnoreCase("MAC"))
caps.setPlatform(org.openqa.selenium.Platform.MAC);
else if (platform.equalsIgnoreCase("Andorid"))
caps.setPlatform(org.openqa.selenium.Platform.ANDROID);
// Version
caps.setVersion(version);
driver = new RemoteWebDriver(new URL(
"http://localhost:4444/wd/hub"), caps);
selenium = new WebDriverBackedSelenium(driver, url);
}
@AfterTest
public void afterTest() {
// Close the browser
driver.quit();
selenium.stop();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
}
WebDriver的不同浏览器Java代码
package base;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.*;
import org.openqa.selenium.ie.*;
import org.openqa.selenium.chrome.*;
import org.openqa.selenium.remote.*;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import static org.testng.Assert.*;
import org.testng.annotations.*;
import java.io.*;
import java.net.*;
public class BaseWebDriver {
protected WebDriver driver = null;
private StringBuffer verificationErrors = new StringBuffer();
@Parameters({ "platform", "browser", "version", "url" })
@BeforeTest(alwaysRun = true)
public void setup(String platform, String browser, String version,
String url) throws MalformedURLException, IOException {
DesiredCapabilities caps = null;
// Browsers
if (browser.equalsIgnoreCase("Internet Explorer")) {
System.setProperty("webdriver.ie.driver",
"c:\\test\\IEDriverServer.exe");
caps = DesiredCapabilities.internetExplorer();
// IE安全设置
caps.setCapability(
InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
true);
// browser zoom level must be set to 100%
} else if (browser.equalsIgnoreCase("Firefox")) {
System.setProperty("webdriver.firefox.bin",
"C:\\test\\Firefox4\\firefox.exe");
caps = DesiredCapabilities.firefox();
} else if (browser.equalsIgnoreCase("chrome")) {
System.setProperty("webdriver.chrome.driver",
"c:\\test\\chromedriver.exe");
caps = DesiredCapabilities.chrome();
caps.setCapability(
"chrome.binary",
"C:\\test\\Chrome31\\chrome.exe");
} else if (browser.equalsIgnoreCase("iPad"))
caps = DesiredCapabilities.ipad();
else if (browser.equalsIgnoreCase("Android"))
caps = DesiredCapabilities.android();
// Platforms
if (platform.equalsIgnoreCase("Windows"))
caps.setPlatform(org.openqa.selenium.Platform.WINDOWS);
else if (platform.equalsIgnoreCase("MAC"))
caps.setPlatform(org.openqa.selenium.Platform.MAC);
else if (platform.equalsIgnoreCase("Andorid"))
caps.setPlatform(org.openqa.selenium.Platform.ANDROID);
// Version
caps.setVersion(version);
driver = new RemoteWebDriver(new URL(
"http://localhost:4444/wd/hub"), caps);
driver.get(url);
//
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(new ExpectedCondition<WebElement>() {
@Override
public WebElement apply(WebDriver d) {
return d.findElement(By.id("login"));
}
});
}
/* @Test(description = "TestDemo")
public void testDemo() throws InterruptedException {
// Sleep until the div we want is visible or 5 seconds is over
long end = System.currentTimeMillis() + 5000;
while (System.currentTimeMillis() < end) {
WebElement resultsDiv = driver.findElement(By.id("container"));
// If results have been returned, the results are displayed in a
// drop down.
if (resultsDiv.isDisplayed()) {
break;
}
}
}*/
@AfterTest
public void afterTest() {
// Close the browser
driver.quit();
//driver.close();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
}
Grid下的不同浏览器运行脚本
总控运行
rem http://localhost:4444/grid/console 可以查看hub总控的信息
java -jar selenium-server-standalone-2.35.0.jar -role hub -port 4444 -nodeTimeout 600
各种浏览器运行的脚本
参数设置相同的部分[IP RC/WD运行模式]
@echo off
set a=0
for %%a in (%*) do set /a a+=1
echo "%a% argc"
Rem 可变的设置
set PORT=8902
if %a%==1 (
if "%1%"=="" (
set IP="localhost"
) else (
set IP=%1%
)
set MODE="webdriver"
) else (
if "%1%"=="" (
set IP="localhost"
) else (
set IP=%1%
)
if "%2%"=="rc" (
set MODE="node"
set PORT=9902
) else (
set MODE="webdriver"
)
)
echo %IP% %MODE%
不同浏览器的运行参数
java -Dwebdriver.chrome.driver="c:\test\chromedriver.exe" -jar selenium-server-standalone-2.35.0.jar -role %MODE% -hubHost %IP% -port %PORT% -timeout 20000 -browser "browserName=chrome,version=31,maxInstances=2,platform=WINDOWS,chrome.binary=C:\test\Chrome31\chrome.exe"
rem java -jar selenium-server-standalone-2.35.0.jar -h 可以查看帮助参数
rem !!! -browser参数中,逗号之间不要有空格
java -jar selenium-server-standalone-2.35.0.jar -role %MODE% -hubHost %IP% -port %PORT% -timeout 20000 -browser "browserName=firefox,version=4,maxInstances=1,platform=WINDOWS,firefox_binary=C:\test\Firefox4\firefox.exe"
java -Dwebdriver.ie.driver="c:\test\IEDriverServer.exe" -jar selenium-server-standalone-2.35.0.jar -role %MODE% -hubHost %IP% -port %PORT% -timeout 20000 -browser "browserName=internet explorer,version=8,maxInstances=1,platform=WINDOWS"
参考
v 零成本实现Web自动化测试-基于Selenium和Bromine 4407693.2230619944
v Selenium测试实践-基于电子商务平台 关春银等
v Selenium Testing Tools Cookbook
Over 90 recipes to build, maintain, and improve test automation with Selenium WebDriver Unmesh Gundecha
v webdriver文档
v Selenium私房菜(新手入门教程)
http://www.compendiumdev.co.uk/selenium
http://tech.it168.com/a2013/0906/1530/000001530755_all.shtml
https://code.google.com/p/selenium/downloads/list
Web 自动化测试的更多相关文章
- web自动化测试中绕开验证码登陆的方式
web自动化测试中登陆需验证码是很大的一个困扰.现推荐一种简单的避开验证码登陆的方式,先代码进入登录页,人工输入验证码登录后浏览器自动保存cookie,再在新的标签中登录. 具体代码如下: publi ...
- Web自动化测试工具调研
背景 Web自动化测试越来越被重视, 因为现在Web已经是工程化的状态. 如何通过工具测试, 保证Web开发的质量,提升开发效率,是Web工具的诞生的来由. Web测试分为以下几个方面: 1. 界面测 ...
- Web自动化测试学习方向(Selenium)
目前越来越多的人想学自动化测试,认为自动化测试好牛逼.经常在测试交流群里看见有HR发招聘广告说:招初级(功能测试),招中级(性能测试),招高级(自动化测试)...... 我不去讨论他们这个初中高级的说 ...
- Web自动化测试 Selenium 1/3
Selenium 名字的来源 在这里,我还想说一下关于 Selenium 名字的来源,很有意思的 : > : Selenium 的中文名为 “ 硒 ” ,是一种化学元素的名字,它 对 汞 ( M ...
- TestNG测试框架在基于Selenium进行的web自动化测试中的应用
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ TestNG+Selenium+Ant TestNG这个测试框架可以很好的和基于Selenium的 ...
- 使用 Sahi 实现 Web 自动化测试
Sahi 是 Tyto Software 旗下的一个基于业务的开源 Web 应用自动化测试工具.Sahi 运行为一个代理服务器,并通过注入 JavaScript 来访问 Web 页面中的元素.Sahi ...
- 从手工测试转型web自动化测试继而转型成专门做自动化测试的学习路线。
在开始之前先自学两个工具商业web自动化测试工具请自学QTP:QTP的学习可以跳过,我是跳过了的.开源web自动化测试工具请自学Selenium:我当年是先学watir(耗时1周),再学seleniu ...
- Windows环境搭建Web自动化测试框架Watir
Windows环境搭建Web自动化测试框架Watir 一.前言 Web自动化测试一直是一个比较迫切的问题,对于现在web开发的敏捷开发,却没有相对应的敏捷测试,故开此主题,一边研究,一边将We ...
- Web自动化测试学习点总结
"大不可量,深不可测"这是出自<韩非子·主道>的一段话.关于自动化测试也是如此,web系统开发完成,测试人员对页面进行测试,寻找bug.这个过程,需要摸索着前进. 什么 ...
- 自动化测试(—)Web自动化测试理解
最近几天,由于工作需要接触Web自动化测试,所以我从网上找的资料,学习了解,然后自己总结汇总的随笔,如文章中有不足的地方,请大家多多指教:或者文章内容与他人相似,望见谅. 手工测试跟自动化 ...
随机推荐
- Chart:Grafana
ylbtech-Chart:Grafana 1.返回顶部 1-1. 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 0. https://grafana.com/ 1. http: ...
- SQLite在.NET中自适应32位/64位系统
如果一个.NET应用要自适应32位/64位系统,只需要在项目的“目标平台”设置为“Any CPU”.但是如果应用中使用了SQLite,情况就不同了. SQLite的.NET开发包来自是System.D ...
- ubuntu install google-chrome-stable
google-chrome-stable is available on a 3rd Party Repository: Google Chrome (for Stable). Follow the ...
- 【jquery采坑】Ajax配合form的submit提交(微擎表单提交,ajax验证,submit提交)
1.采坑:实现form的submit提交,在提交之前,进行ajax的不同校验,然后onsubmit=return check(),进行提交 1/1 目的:可以实现以 from的submit提交,然后还 ...
- 通过__block的作用深入研究block
block普通引用 默认情况下,在block中访问外部变量是通过复制一个变量来操作的,既可以读,但是写操作不对原变量生效,下面通过代码来举证 NSString *a = @"testa&qu ...
- Mongodb系列- CRUD操作介绍
---恢复内容开始--- 一 Create 操作 在MongoDB中,插入操作的目标是一个集合. MongoDB中的所有写入操作在单个文档的层次上都是原子的. For examples, see In ...
- 批量备份数据库脚本(PowerShell版)
开始 昨天备份一个数据库拿来测试,发现备份后的文件非常大.后来去检查下使用的备份脚本,原来之前的备份脚本没有压缩功能. 现把之前的备份脚本修改下,支持压缩备份,和支持仅复制备份(CopyOnly). ...
- MySQL字符集不一致的解决办法总结
用SHOW CREATE TABLE table_name;可以看出具体的字符集设置. 错误代码: Illegal mix of collations (utf8mb4_unicode_ci,IMPL ...
- 微信公众号 chinaxdt 的 解压密码 mima
关于密码:解压密码获取方式第一步关注微信号“chinaxdt”第二步发送信息“mima”即可获取自动回复解压密码 这个 chinaxdt 的微信公众号已经失效,所以大家也不用去加了,密码我这告诉大家. ...
- 关于VMware Linux 虚拟机忘记root 密码找回
因为昨天新安装过虚拟机设置了新的密码,再加上我好长时间没有用自己旧的虚拟机,导致忘记了密码,原来虽然知道在单用模式下,找回密码,但是确实是自己从来都没有做过,还好我们组大手飞翔哥告诉了我,怎么找回ro ...