/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 > |
09 | < groupId >org.seleniumhq.selenium</ groupId > |
10 | < artifactId >selenium-java</ artifactId > |
11 | < version >2.25.0</ version > |
14 | < groupId >com.opera</ groupId > |
15 | < artifactId >operadriver</ artifactId > |
21 | < groupId >com.opera</ groupId > |
22 | < artifactId >operadriver</ artifactId > |
23 | < version >0.16</ version > |
26 | < groupId >org.seleniumhq.selenium</ groupId > |
27 | < artifactId >selenium-remote-driver</ artifactId > |
32 | </ dependencyManagement > |
pom.xml修改保存后,eclipse会自动把需要的jar包下载完成。
【2.测试FireFox】
Selenium最初就是在FireFox上做起来的插件,所以我们先来搭建FireFox的环境。
确保你正确安装了FireFox后,就可以直接编写java代码测试喽。
在lesson1目录下建立ExampleForFireFox.java
(因为国内不少朋友访问google的时候会出问题,所以我就把代码中的google变成baidu了)
viewsource
print?
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;
|
10 | public class ExampleForFireFox{ |
11 | public
static void main(String[]args){
|
12 | //如果你的FireFox没有安装在默认目录,那么必须在程序中设置
|
13 | //System.setProperty("webdriver.firefox.bin","D:\\ProgramFiles\\MozillaFirefox\\firefox.exe"); |
15 | WebDriverdriver=
new FirefoxDriver(); |
18 | driver.get( "http://www.baidu.com" ); |
20 | //driver.navigate().to("http://www.baidu.com"); |
23 | System.out.println( "1Pagetitleis:"
+driver.getTitle()); |
26 | WebElementelement=driver.findElement(By.id( "kw" )); |
29 | element.sendKeys( "zTree" ); |
34 | //通过判断title内容等待搜索页面加载完毕,Timeout设置10秒
|
35 | ( new
WebDriverWait(driver, 10 )).until( new
ExpectedCondition<Boolean>(){ |
36 | public
Booleanapply(WebDriverd){ |
37 | return
d.getTitle().toLowerCase().endsWith( "ztree" ); |
42 | System.out.println( "2Pagetitleis:"
+driver.getTitle()); |
普通情况下,直接运行代码就可以看到会自动弹出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?
04 | import java.io.IOException;
|
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;
|
15 | public class ExampleForChrome{ |
16 | public
static void main(String[]args)
throws IOException{
|
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( |
26 | "E:\\SeleniumWebDriver\\chromedriver_win_23.0.1240.0\\chromedriver.exe" )) |
27 | .usingAnyFreePort().build(); |
30 | WebDriverdriver=
new RemoteWebDriver(service.getUrl(), |
31 | DesiredCapabilities.chrome()); |
34 | driver.get( "http://www.baidu.com" ); |
36 | //driver.navigate().to("http://www.baidu.com"); |
39 | System.out.println( "1Pagetitleis:"
+driver.getTitle()); |
42 | WebElementelement=driver.findElement(By.id( "kw" )); |
45 | element.sendKeys( "zTree" ); |
50 | //通过判断title内容等待搜索页面加载完毕,Timeout设置10秒
|
51 | ( new
WebDriverWait(driver, 10 )).until( new
ExpectedCondition<Boolean>(){ |
52 | public
Booleanapply(WebDriverd){ |
53 | return
d.getTitle().toLowerCase().endsWith( "ztree" ); |
58 | System.out.println( "2Pagetitleis:"
+driver.getTitle()); |
运行一下看看,是不是一切OK了?
【2012.12.06补充】
上一个Demo中无法正常使用newChromeDriver(),今天在做进一步学习时看到一篇文章(http://qa.blog.163.com/blog/static/19014700220122231779/),恍然大悟,原来只需要把
‘webdriver.chrome.driver’的值设置为chromedriver的路径就可以了。
viewsource
print?
03 | import java.io.IOException;
|
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;
|
12 | public class ExampleForChrome2{ |
13 | public
static void main(String[]args)
throws IOException{
|
16 | "webdriver.chrome.driver" , |
17 | "E:\\SeleniumWebDriver\\chromedriver_win_23.0.1240.0\\chromedriver.exe" ); |
18 | //创建一个ChromeDriver的接口,用于连接Chrome
|
20 | WebDriverdriver=
new ChromeDriver(); |
23 | driver.get( "http://www.baidu.com" ); |
25 | //driver.navigate().to("http://www.baidu.com"); |
28 | System.out.println( "1Pagetitleis:"
+driver.getTitle()); |
31 | WebElementelement=driver.findElement(By.id( "kw" )); |
34 | element.sendKeys( "zTree" ); |
39 | //通过判断title内容等待搜索页面加载完毕,Timeout设置10秒
|
40 | ( new
WebDriverWait(driver, 10 )).until( new
ExpectedCondition<Boolean>(){ |
41 | public
Booleanapply(WebDriverd){ |
42 | return
d.getTitle().toLowerCase().endsWith( "ztree" ); |
47 | System.out.println( "2Pagetitleis:"
+driver.getTitle()); |
52 | //element=driver.findElement(By.id("kw")); |
56 | //element.sendKeys("zTree"); |
【4.测试IE】
想逃避IE吗??作为前端开发,IE你是必须要面对的,冲吧!
其实你会发现,Selenium主要也就是针对FireFox和IE来制作的,所以把FireFox的代码修改为IE的,那是相当的容易,只需要简单地两步:
1)把ExampleForFireFox.java另存为ExampleForIE.java
2)把WebDriverdriver=newFirefoxDriver();修改为WebDriverdriver=newInternetExplorerDriver();3)一般大家的IE都是默认路径吧,所以也就不用设置property了
viewsource
print?
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;
|
10 | public class ExampleForIE{ |
11 | public
static void main(String[]args){
|
12 | //如果你的FireFox没有安装在默认目录,那么必须在程序中设置
|
13 | //System.setProperty("webdriver.firefox.bin","D:\\ProgramFiles\\MozillaFirefox\\firefox.exe"); |
15 | WebDriverdriver=
new InternetExplorerDriver(); |
18 | driver.get( "http://www.baidu.com" ); |
20 | //driver.navigate().to("http://www.baidu.com"); |
23 | System.out.println( "1Pagetitleis:"
+driver.getTitle()); |
26 | WebElementelement=driver.findElement(By.id( "kw" )); |
29 | element.sendKeys( "zTree" ); |
34 | //通过判断title内容等待搜索页面加载完毕,Timeout设置10秒
|
35 | ( new
WebDriverWait(driver, 10 )).until( new
ExpectedCondition<Boolean>(){ |
36 | public
Booleanapply(WebDriverd){ |
37 | return
d.getTitle().toLowerCase().endsWith( "ztree" ); |
42 | System.out.println( "2Pagetitleis:"
+driver.getTitle()); |
运行一下,是不是soeasy?
入门工作完成,现在完全可以利用java代码,让Selenium自动执行我们设置好的测试用例了,不过.....这仅仅是个开始。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理