Selenium手册(二)——WebDrive-创新互联

【2016/8/2 9:00 更新】

建德网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联2013年至今到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
  • 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”来使用。

      未完待续...


文章名称:Selenium手册(二)——WebDrive-创新互联
文章链接:http://ybzwz.com/article/desehe.html