千家信息网

Selenium手册(二)——WebDrive

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,【2016/8/2 9:00 更新】Web DriverSelenium 2.0 是WebDriver API的集合。Selenium-WebDriver的开发目的是为了更好地支持动态网页技术。Web
千家信息网最后更新 2024年11月11日Selenium手册(二)——WebDrive

【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"。范例如下:

        4.0.0        MySel20Proj        MySel20Proj        1.0                                    org.seleniumhq.selenium                selenium-java                2.53.1                    


以上内容中的版本信息为此文档编辑时的最新版本信息,实际操作中请以当下最新版本信息为主。


【个人笔记】
学习过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:

               junit          junit          4.12          test                     org.seleniumhq.selenium           selenium-java           2.16.1     



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()                        {                               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"来使用。

      未完待续...











0