【2016/8/2 9:00 更新】
Web Driver
Selenium 2.0 是WebDriver API的集合。
Selenium-WebDriver的开发目的是为了更好地支持动态网页技术。
WebDriver 的目标是供应一套完善的面向对象的API,为当下的web应用测试提供更好的支持。
其他不翻,小白翻不好怕引起歧义。
Web Server
需不需要下载Selenium Server,取决于你如何使用Selenium-WebDriver。
不需要Server的情况
测试用例的执行和测试所使用的浏览器都在同一机器上。
需要Selenium Server的情况
1:使用Selenium-Grid把测试集分配到多部机器或虚拟机器上执行。
2:连接一台拥有某个特定版本浏览器的远程机器。
3:不使用Java bindings(也就是Python,C#,Ruby)而使用HtmlUnit Driver来设置一个Selenium-WebDriver Project。
Java
【个人笔记】
现在我们知道Selenium2.0(即WebDriver)是一系列可以运用在web应用上的API了,那么我们就使用自己掌握的语言,通过调用对应API编写测试程序,进行自动化测试工作。
Java下使用Selenium,文档只推荐了Maven,入门小白又多了一样工具要学,真是心塞。但在招聘中我也曾看到会使用项目管理工具的要求,那么花一些时间熟悉Maven基本操作也是可以的。找了好些时间,找到了一个Maven入门视频,链接及视频存在的一些问题贴在另一篇文章《Maven入门及笔记 》里,传送门:http://maise.blog.51cto.com/11149607/1829580
【结束】
创建一个Selenium 2.0 Java工程,最便捷的方式就是使用Maven。通过设置Maven的pom.xml文件,Maven将为你创建工程,下载Java bindings(即Selenium 2.0 java client库)和所有项目依赖JAR包,然后你就可以把工程导入你常用的IDE, IntelliJ IDEA or Eclipse了。
1. 新建一个文件夹(例 C:\Maven)。
2. 在“Maven”下新建一个.txt文件,更名为“pom.xml”。范例如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>MySel20Proj</groupId> <artifactId>MySel20Proj</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.53.1</version> </dependency> </dependencies> </project>
以上内容中的版本信息为此文档编辑时的最新版本信息,实际操作中请以当下最新版本信息为主。
【个人笔记】
学习过Maven入门视频(一)的人对Selenium给出的pom.xml的范例就能大致理解了。上文提供的最新版本信息,指的是“dependencies”下的version,要查询最新version,直接在搜索引擎上输入artifactId项的文字加version,就能找到相关网站查询最新版本信息。
“dependencies”下可添加多个“dependency”,保存完毕执行命令如“mvn clean install”,Maven就为你自行下载对应的JAR包。
【结束】
3. 现在可以通过命令行窗口,CD进入工程文件夹,输入指令:mvn clean install,Maven将自动下载Selenium和所有项目依赖JAR包到文件夹中。最后,把工程导入IDE中,就可以开始编程了。
【个人笔记】
建立一个项目实战步骤:
1. 安装好Maven,复制setting.xml到"C:\Users\Administrator\.m2"下。
2. cd到你想放置工程的路径下,输入: mvn archetype:generate -DgroupId=MySel20Proj -
DartifactId=MySel20Proj -Dversion=1.0。Build succes后检查路径下的文件是否正确建立。
3. 打开pom.xml,Dependencies下Maven已经为我们下载了junit,junit是在单元测试中使用的包。参照
Selenium官网提供的范例增加dependency。
注意我们使用的语言是Java:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.16.1</version> </dependency> </dependencies>
4. cd到pom.xml所在的路径下,执行mvn eclipse:clean(这一步会删除已存在的classpath和project文件),再执行mvn eclipse:eclipse,你可以看到pom.xml所以的路径下生成了classpath文件。然后打开eclipse,File->Import->Maven->Existing Maven project->选择路径,就可以看到新建的工程->Finish。
通过范例介绍Selenium-WebDriver API
工程新建完毕,你可以体会到WebDriver和其他普通的库一样:它十分完善,通常你不需要在使用它前再做其他补充步骤或安装,这点比Selenium-RC可方便多了。
注意:使用ChromeDriver,Opera Driver,Android Driver或iOS Driver需要再增加相应的操作。
现在你已经可以开始编程了,先用这个范例练练手吧。此范例通过谷歌搜索“Cheese”并打印页面的标题。
package MySel20Proj; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.WebDriverWait; public class Selenium2Example { public static void main(String[] args) { //【个人笔记】如果程序报错找不到路径: //System.setProperty( "WebDriver.Firefox.bin", "找到Firefox.exe的安装路径,复制路径"); //Syste.setProperty("WebDriver.chromedriver.exe", "同上"); // 创建一个 Firefox driver的实例 // 注意,接下来的代码依赖于接口(即WebDriver) // 而不是实现(即FirefoxDriver) // 注:FirefoxDriver implements WebDriver WebDriver driver = new FirefoxDriver(); // 访问谷歌【打不开谷歌就换百度】 driver .get("http://www.google.com" ); // 你也可以用以下语句实现访问动作 // driver.navigate().to(" // 通过name来定位搜索框元素【百度 By.name("wd")】 WebElement element = driver .findElement(By.name ("q" )); // 搜索cheese! element .sendKeys("Cheese!" ); // 提交. WebDriver会为我们执行搜索动作 element .submit(); // 确认下页面title System. out .println("Page title is: " + driver.getTitle()); // 谷歌【百度】的搜索是使用JavaScript进行动态呈现 // 等待页面的加载,倒计时十秒 ( new WebDriverWait(driver , 10)).until( new ExpectedCondition<Boolean>() { public Boolean apply(WebDriver d ) { return d .getTitle().toLowerCase().startsWith( "cheese!"); } }); // 打印输出"" System. out .println("Page title is: " + driver.getTitle()); //关闭浏览器 driver .quit(); } }
【个人笔记】
我选择ChromeDriver实现段代码, 运行时,eclipse console窗口总是出现一行文字“Only local connections are allowed”,这句话是什么意思?查一下API文档,ChromeDriver的定义:
1. A WebDriver implementation that controls a Chrome browser running on the local machine.
2. The control server which each instance communicates with will live and die with the instance.
也就是说,ChromeDriver在本机生成一个server,server通过本机的一个开放端口进行监听,收集上层的请求,操控本机的chrome浏览器。那当然就是“只能允许本地连接”了。根据stackoverflow最高票的回答,这句话只是一句提示性的信息而已。
http://stackoverflow.com/questions/25080500/when-run-webdriver-with-chrome-browser-getting-message-only-local-connection
Selenium-WebDriver API 命令和操作
读取网页
driver.get("http://www.google.com");
WebDriver不一定会等待页面的加载,这其中有几个因素的影响,包括何种操作系统搭配何种浏览器。在某些情况下,WebDriver可能会在页面加载之前,甚至加载一开始或加载中,返回control(【个人笔记】目前理解等同于Java的Event)。为了保证健壮性(【个人笔记】什么的健壮性?),你要使用显性/隐性等待来等待element(s)的出现。
定位UI元素
定位元素可通过WebDriver的实例或通过WebElement来实现。每种绑定语言(Selenium支持的语言)都有“Find Element”和“Find Elements”方法。前一个方法返回符合查询的WebElement对象,如果元素不存在则抛出异常。后一种方法返回一个含多个WebElement的list,如果查询无结果则返回一个空表。
“Find”方法需要搭配“By”来使用。
未完待续...
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。