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

<?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”来使用。

      未完待续…


原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/191384.html

(0)
上一篇 2021年11月14日
下一篇 2021年11月14日

相关推荐

发表回复

登录后才能评论