您的位置:首页 > 其它

和我一起学 Selenium WebDriver

2013-07-05 11:37 281 查看
/article/3469851.html

zTree东西不多,我也一直使用着原始的人工测试手段,随着内容的不断增多,测试起来就越发的繁杂,而且经常犯懒,这样就会忽略很多本该发现的问题,而且也容易出现旧的bug反复出现的情况,这都是测试不规范造成的。要做好东西就要更加规范和严格,于是乎决定要学习一下SeleniumWebDriver,也就是原先的Seleniumv2了,这方面整体的文章并不多,所以一边学着,自己一边整理吧。

对于这个可以自动化测试的工具(SeleniumWebDriver)我就不做过多描述了,去google、baidu搜索一下即可。我这里只记录学习SeleniumWebDriver的过程,尤其是运行时可能出现的问题,当然了,我是做java的,我只学习java与SeleniumWebDriver配合的方法。

一、下载文件

先要去官网(http://seleniumhq.org/download/)下载必需的文件:

SeleniumIDE(专门用于FireFox测试的独立界面,可以录制测试步骤,但我更倾向于写代码做标准的功能测试)

SeleniumServer(可以输入指令控制、可以解决跨域的js问题,等到后面学到了再讲吧)

TheInternetExplorerDriverServer(专门用于IE测试的)

SeleniumClientDrivers(可以找到你熟悉的语言,例如我选择的Java)

ThirdPartyBrowserDriversNOTSUPPORTED/DEVELOPEDbyseleniumhq(第三方开发的Selenium插件,第一个就是Chrome的,否则你就没办法测试Chrome了)

其他的,就根据你自己的需要寻找吧,目前这些足够我用了。

二、安装&运行

貌似摆弄新东西时,只有“HelloWorld”蹦出来以后,我们这些初学者才会感到情绪稳定,那就赶紧开始吧。

对于初期打算直接用编程方式制作测试用例的情况来说,SeleniumIDE、SeleniumServer都可以不用安装执行。

英语好的朋友可以直接看官网的文档(http://seleniumhq.org/documentation/)就能够开始使用了。

看中文的,就继续听我唠叨:

【1.建立Maven工程】

Selenium支持maven工程,这会让你的工作更加简便。

用Eclipse建个Maven的工程,建成后,直接修改pom.xml,(参考:http://seleniumhq.org/docs/03_webdriver.html#setting-up-a-selenium-webdriver-project)

viewsource

print?

01
<
project

xmlns
=
"http://maven.apache.org/POM/4.0.0"

xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
02
xsi:schemaLocation
=
"http://maven.apache.org/POM/4.0.0
>'target='_blank'>http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
03
<
modelVersion
>4.0.0</
modelVersion
>
04
<
groupId
>Selenium2Test</
groupId
>
05
<
artifactId
>Selenium2Test</
artifactId
>
06
<
version
>1.0</
version
>
07
<
dependencies
>
08
<
dependency
>
09
<
groupId
>org.seleniumhq.selenium</
groupId
>
10
<
artifactId
>selenium-java</
artifactId
>
11
<
version
>2.25.0</
version
>
12
</
dependency
>
13
<
dependency
>
14
<
groupId
>com.opera</
groupId
>
15
<
artifactId
>operadriver</
artifactId
>
16
</
dependency
>
17
</
dependencies
>
18
<
dependencyManagement
>
19
<
dependencies
>
20
<
dependency
>
21
<
groupId
>com.opera</
groupId
>
22
<
artifactId
>operadriver</
artifactId
>
23
<
version
>0.16</
version
>
24
<
exclusions
>
25
<
exclusion
>
26
<
groupId
>org.seleniumhq.selenium</
groupId
>
27
<
artifactId
>selenium-remote-driver</
artifactId
>
28
</
exclusion
>
29
</
exclusions
>
30
</
dependency
>
31
</
dependencies
>
32
</
dependencyManagement
>
33
</
project
>
pom.xml修改保存后,eclipse会自动把需要的jar包下载完成。

【2.测试FireFox】

Selenium最初就是在FireFox上做起来的插件,所以我们先来搭建FireFox的环境。

确保你正确安装了FireFox后,就可以直接编写java代码测试喽。

在lesson1目录下建立ExampleForFireFox.java

(因为国内不少朋友访问google的时候会出问题,所以我就把代码中的google变成baidu了)

viewsource

print?

01
package
lesson1;
02
03
import

org.openqa.selenium.By;
04
import

org.openqa.selenium.WebDriver;
05
import

org.openqa.selenium.WebElement;
06
import

org.openqa.selenium.firefox.FirefoxDriver;
07
import

org.openqa.selenium.support.ui.ExpectedCondition;
08
import

org.openqa.selenium.support.ui.WebDriverWait;
09
10
public
class
ExampleForFireFox{
11
public

static
void

main(String[]args){
12
//如果你的FireFox没有安装在默认目录,那么必须在程序中设置
13
//System.setProperty("webdriver.firefox.bin","D:\\ProgramFiles\\MozillaFirefox\\firefox.exe");
14
//创建一个FireFox的浏览器实例
15
WebDriverdriver=
new
FirefoxDriver();
16
17
//让浏览器访问Baidu
18
driver.get(
"http://www.baidu.com"
);
19
//用下面代码也可以实现
20
//driver.navigate().to("http://www.baidu.com");
21
22
//获取网页的title
23
System.out.println(
"1Pagetitleis:"

+driver.getTitle());
24
25
//通过id找到input的DOM
26
WebElementelement=driver.findElement(By.id(
"kw"
));
27
28
//输入关键字
29
element.sendKeys(
"zTree"
);
30
31
//提交input所在的form
32
element.submit();
33
34
//通过判断title内容等待搜索页面加载完毕,Timeout设置10秒
35
(
new

WebDriverWait(driver,
10
)).until(
new

ExpectedCondition<Boolean>(){
36
public

Booleanapply(WebDriverd){
37
return

d.getTitle().toLowerCase().endsWith(
"ztree"
);
38
}
39
});
40
41
//显示搜索结果页面的title
42
System.out.println(
"2Pagetitleis:"

+driver.getTitle());
43
44
//关闭浏览器
45
driver.quit();
46
}

47
}
普通情况下,直接运行代码就可以看到会自动弹出FireFox窗口,访问baidu.com,然后输入关键字并查询,一切都是自动完成的。

错误提醒:

1)Exceptioninthread"main"org.openqa.selenium.WebDriverException:CannotfindfirefoxbinaryinPATH.Makesurefirefoxisinstalled.

出现这个错误,是说明你的FireFox文件并没有安装在默认目录下,这时候需要在最开始执行:System.setProperty设置环境变量"webdriver.firefox.bin"将自己机器上FireFox的正确路径设置完毕后即可。

2)Exceptioninthread"main"org.openqa.selenium.UnsupportedCommandException:Badrequest

出现这个错误,很有意思。查了一下有人说应该是hosts出现了问题,加上一个127.0.0.1localhost就行了,但我的hosts上肯定有这个玩意,为啥也会出现这个问题呢?

经过调试,发现127.0.0.1localhost的设置必须要在hosts文件的最开始,而且如果后面有其他设置后,也不要再出现同样的127.0.0.1localhost,只要有就会出错。(因为我为了方便访问google的网站,专门加入了smarthosts的内容,导致了localhost的重复)

【3.测试Chrome】

Chrome虽然不是Selenium的原配,但是没办法,她太火辣了,绝对不能抛下她不管的。

把ExampleForFireFox.java稍微修改就可以制作出一个ExampleForChrome.java,直接把newFireFoxDriver()修改为newChromeDriver()你会发现还是行不通。

错误如下:

1)Exceptioninthread"main"java.lang.IllegalStateException:Thepathtothedriverexecutablemustbesetbythewebdriver.chrome.driversystemproperty;formoreinformation,seehttp://code.google.com/p/selenium/wiki/ChromeDriver.Thelatestversioncanbedownloadedfromhttp://code.google.com/p/chromedriver/downloads/list
这应该是找不到chrome的文件,好吧,利用System.setProperty方法添加路径,这里要注意,是“webdriver.chrome.driver”可不是“webdriver.chrome.bin

设置路径后还是会报错:

2)[6416:4580:1204/173852:ERROR:gpu_info_collector_win.cc(91)]Can'tretrieveavalidWinSATassessment.

这个貌似是因为Selenium无法直接启动Chrome导致的,必须要通过前面咱们下载Chrome的第三方插件ChromeDriver,去看第一个错误中提示给你的网址:http://code.google.com/p/selenium/wiki/ChromeDriver

按照人家给的例子来修改我们的测试代码吧:

viewsource

print?

01
package
lesson1;
02
03
import

java.io.File;
04
import

java.io.IOException;
05
06
import

org.openqa.selenium.By;
07
import

org.openqa.selenium.WebDriver;
08
import

org.openqa.selenium.WebElement;
09
import

org.openqa.selenium.chrome.ChromeDriverService;
10
import

org.openqa.selenium.remote.DesiredCapabilities;
11
import

org.openqa.selenium.remote.RemoteWebDriver;
12
import

org.openqa.selenium.support.ui.ExpectedCondition;
13
import

org.openqa.selenium.support.ui.WebDriverWait;
14
15
public
class
ExampleForChrome{
16
public

static
void

main(String[]args)
throws

IOException{
17
//设置chrome的路径
18
System.setProperty(
19
"webdriver.chrome.driver"
,
20
"C:\\DocumentsandSettings\\sq\\LocalSettings\\ApplicationData\\Google\\Chrome\\Application\\chrome.exe"
);
21
//创建一个ChromeDriver的接口,用于连接Chrome
22
@SuppressWarnings
(
"deprecation"
)
23
ChromeDriverServiceservice=
new
ChromeDriverService.Builder()
24
.usingChromeDriverExecutable(
25
new

File(
26
"E:\\SeleniumWebDriver\\chromedriver_win_23.0.1240.0\\chromedriver.exe"
))
27
.usingAnyFreePort().build();
28
service.start();
29
//创建一个Chrome的浏览器实例
30
WebDriverdriver=
new
RemoteWebDriver(service.getUrl(),
31
DesiredCapabilities.chrome());
32
33
//让浏览器访问Baidu
34
driver.get(
"http://www.baidu.com"
);
35
//用下面代码也可以实现
36
//driver.navigate().to("http://www.baidu.com");
37
38
//获取网页的title
39
System.out.println(
"1Pagetitleis:"

+driver.getTitle());
40
41
//通过id找到input的DOM
42
WebElementelement=driver.findElement(By.id(
"kw"
));
43
44
//输入关键字
45
element.sendKeys(
"zTree"
);
46
47
//提交input所在的form
48
element.submit();
49
50
//通过判断title内容等待搜索页面加载完毕,Timeout设置10秒
51
(
new

WebDriverWait(driver,
10
)).until(
new

ExpectedCondition<Boolean>(){
52
public

Booleanapply(WebDriverd){
53
return

d.getTitle().toLowerCase().endsWith(
"ztree"
);
54
}
55
});
56
57
//显示搜索结果页面的title
58
System.out.println(
"2Pagetitleis:"

+driver.getTitle());
59
60
//关闭浏览器
61
driver.quit();
62
//关闭ChromeDriver接口
63
service.stop();
64
65
}

66
}
运行一下看看,是不是一切OK了?

【2012.12.06补充】

上一个Demo中无法正常使用newChromeDriver(),今天在做进一步学习时看到一篇文章(http://qa.blog.163.com/blog/static/19014700220122231779/),恍然大悟,原来只需要把
‘webdriver.chrome.driver’的值设置为chromedriver的路径就可以了。

viewsource

print?

01
package
lesson1;
02
03
import

java.io.IOException;
04
05
import

org.openqa.selenium.By;
06
import

org.openqa.selenium.WebDriver;
07
import

org.openqa.selenium.WebElement;
08
import

org.openqa.selenium.chrome.ChromeDriver;
09
import

org.openqa.selenium.support.ui.ExpectedCondition;
10
import

org.openqa.selenium.support.ui.WebDriverWait;
11
12
public
class
ExampleForChrome2{
13
public

static
void

main(String[]args)
throws

IOException{
14
//设置chrome的路径
15
System.setProperty(
16
"webdriver.chrome.driver"
,
17
"E:\\SeleniumWebDriver\\chromedriver_win_23.0.1240.0\\chromedriver.exe"
);
18
//创建一个ChromeDriver的接口,用于连接Chrome
19
//创建一个Chrome的浏览器实例
20
WebDriverdriver=
new
ChromeDriver();
21
22
//让浏览器访问Baidu
23
driver.get(
"http://www.baidu.com"
);
24
//用下面代码也可以实现
25
//driver.navigate().to("http://www.baidu.com");
26
27
//获取网页的title
28
System.out.println(
"1Pagetitleis:"

+driver.getTitle());
29
30
//通过id找到input的DOM
31
WebElementelement=driver.findElement(By.id(
"kw"
));
32
33
//输入关键字
34
element.sendKeys(
"zTree"
);
35
36
//提交input所在的form
37
element.submit();
38
39
//通过判断title内容等待搜索页面加载完毕,Timeout设置10秒
40
(
new

WebDriverWait(driver,
10
)).until(
new

ExpectedCondition<Boolean>(){
41
public

Booleanapply(WebDriverd){
42
return

d.getTitle().toLowerCase().endsWith(
"ztree"
);
43
}
44
});
45
46
//显示搜索结果页面的title
47
System.out.println(
"2Pagetitleis:"

+driver.getTitle());
48
49
//关闭浏览器
50
driver.quit();
51
52
//element=driver.findElement(By.id("kw"));
53
////element.clear();
54
//element.click();
55
//element.clear();
56
//element.sendKeys("zTree");
57
//element.submit();
58
}

59
}
【4.测试IE】

想逃避IE吗??作为前端开发,IE你是必须要面对的,冲吧!

其实你会发现,Selenium主要也就是针对FireFox和IE来制作的,所以把FireFox的代码修改为IE的,那是相当的容易,只需要简单地两步:

1)把ExampleForFireFox.java另存为ExampleForIE.java

2)把WebDriverdriver=newFirefoxDriver();修改为WebDriverdriver=newInternetExplorerDriver();3)一般大家的IE都是默认路径吧,所以也就不用设置property了

viewsource

print?

01
package
lesson1;
02
03
import

org.openqa.selenium.By;
04
import

org.openqa.selenium.WebDriver;
05
import

org.openqa.selenium.WebElement;
06
import

org.openqa.selenium.ie.InternetExplorerDriver;
07
import

org.openqa.selenium.support.ui.ExpectedCondition;
08
import

org.openqa.selenium.support.ui.WebDriverWait;
09
10
public
class
ExampleForIE{
11
public

static
void

main(String[]args){
12
//如果你的FireFox没有安装在默认目录,那么必须在程序中设置
13
//System.setProperty("webdriver.firefox.bin","D:\\ProgramFiles\\MozillaFirefox\\firefox.exe");
14
//创建一个FireFox的浏览器实例
15
WebDriverdriver=
new
InternetExplorerDriver();
16
17
//让浏览器访问Baidu
18
driver.get(
"http://www.baidu.com"
);
19
//用下面代码也可以实现
20
//driver.navigate().to("http://www.baidu.com");
21
22
//获取网页的title
23
System.out.println(
"1Pagetitleis:"

+driver.getTitle());
24
25
//通过id找到input的DOM
26
WebElementelement=driver.findElement(By.id(
"kw"
));
27
28
//输入关键字
29
element.sendKeys(
"zTree"
);
30
31
//提交input所在的form
32
element.submit();
33
34
//通过判断title内容等待搜索页面加载完毕,Timeout设置10秒
35
(
new

WebDriverWait(driver,
10
)).until(
new

ExpectedCondition<Boolean>(){
36
public

Booleanapply(WebDriverd){
37
return

d.getTitle().toLowerCase().endsWith(
"ztree"
);
38
}
39
});
40
41
//显示搜索结果页面的title
42
System.out.println(
"2Pagetitleis:"

+driver.getTitle());
43
44
//关闭浏览器
45
driver.quit();
46
}

47
}
运行一下,是不是soeasy?

入门工作完成,现在完全可以利用java代码,让Selenium自动执行我们设置好的测试用例了,不过.....这仅仅是个开始。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: