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

      未完待續...











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章