溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Selenium手冊(cè)(二)——WebDrive

發(fā)布時(shí)間:2020-06-14 21:45:02 來(lái)源:網(wǎng)絡(luò) 閱讀:1128 作者:pocp 欄目:軟件技術(shù)

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

  • Web Driver
    Selenium 2.0 是WebDriver API的集合。
    Selenium-WebDriver的開(kāi)發(fā)目的是為了更好地支持動(dòng)態(tài)網(wǎng)頁(yè)技術(shù)。
    WebDriver 的目標(biāo)是供應(yīng)一套完善的面向?qū)ο蟮腁PI,為當(dāng)下的web應(yīng)用測(cè)試提供更好的支持。
    其他不翻,小白翻不好怕引起歧義。

  • Web Server
    需不需要下載Selenium Server,取決于你如何使用Selenium-WebDriver。

    • 不需要Server的情況
      測(cè)試用例的執(zhí)行和測(cè)試所使用的瀏覽器都在同一機(jī)器上。

    • 需要Selenium Server的情況
      1:使用Selenium-Grid把測(cè)試集分配到多部機(jī)器或虛擬機(jī)器上執(zhí)行。
      2:連接一臺(tái)擁有某個(gè)特定版本瀏覽器的遠(yuǎn)程機(jī)器。
      3:不使用Java bindings(也就是Python,C#,Ruby)而使用HtmlUnit Driver來(lái)設(shè)置一個(gè)Selenium-WebDriver Project。

  • Java
    【個(gè)人筆記】
    現(xiàn)在我們知道Selenium2.0(即WebDriver)是一系列可以運(yùn)用在web應(yīng)用上的API了,那么我們就使用自己掌握的語(yǔ)言,通過(guò)調(diào)用對(duì)應(yīng)API編寫(xiě)測(cè)試程序,進(jìn)行自動(dòng)化測(cè)試工作。

    Java下使用Selenium,文檔只推薦了Maven,入門小白又多了一樣工具要學(xué),真是心塞。但在招聘中我也曾看到會(huì)使用項(xiàng)目管理工具的要求,那么花一些時(shí)間熟悉Maven基本操作也是可以的。找了好些時(shí)間,找到了一個(gè)Maven入門視頻,鏈接及視頻存在的一些問(wèn)題貼在另一篇文章《Maven入門及筆記 》里,傳送門:http://maise.blog.51cto.com/11149607/1829580
    【結(jié)束】


    創(chuàng)建一個(gè)Selenium 2.0 Java工程,最便捷的方式就是使用Maven。通過(guò)設(shè)置Maven的pom.xml文件,Maven將為你創(chuàng)建工程,下載Java bindings(即Selenium 2.0 java client庫(kù))和所有項(xiàng)目依賴JAR包,然后你就可以把工程導(dǎo)入你常用的IDE, IntelliJ IDEA or Eclipse了。

    1. 新建一個(gè)文件夾(例 C:\Maven)。
    2. 在“Maven”下新建一個(gè).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>


        以上內(nèi)容中的版本信息為此文檔編輯時(shí)的最新版本信息,實(shí)際操作中請(qǐng)以當(dāng)下最新版本信息為主。

       
    【個(gè)人筆記】
     學(xué)習(xí)過(guò)Maven入門視頻(一)的人對(duì)Selenium給出的pom.xml的范例就能大致理解了。上文提供的最新版本信息,指的是“dependencies”下的version,要查詢最新version,直接在搜索引擎上輸入artifactId項(xiàng)的文字加version,就能找到相關(guān)網(wǎng)站查詢最新版本信息。

   “dependencies”下可添加多個(gè)“dependency”,保存完畢執(zhí)行命令如“mvn clean install”,Maven就為你自行下載對(duì)應(yīng)的JAR包。

    

        【結(jié)束】   

        3. 現(xiàn)在可以通過(guò)命令行窗口,CD進(jìn)入工程文件夾,輸入指令:mvn clean install,Maven將自動(dòng)下載Selenium和所有項(xiàng)目依賴JAR包到文件夾中。最后,把工程導(dǎo)入IDE中,就可以開(kāi)始編程了。


【個(gè)人筆記】

建立一個(gè)項(xiàng)目實(shí)戰(zhàn)步驟:


1. 安裝好Maven,復(fù)制setting.xml到"C:\Users\Administrator\.m2"下。

2. cd到你想放置工程的路徑下,輸入: mvn archetype:generate -DgroupId=MySel20Proj -    

            DartifactId=MySel20Proj -Dversion=1.0。Build succes后檢查路徑下的文件是否正確建立。

3. 打開(kāi)pom.xml,Dependencies下Maven已經(jīng)為我們下載了junit,junit是在單元測(cè)試中使用的包。參照

            Selenium官網(wǎng)提供的范例增加dependency。

        注意我們使用的語(yǔ)言是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所在的路徑下,執(zhí)行mvn eclipse:clean(這一步會(huì)刪除已存在的classpath和project文件),再執(zhí)行mvn eclipse:eclipse,你可以看到pom.xml所以的路徑下生成了classpath文件。然后打開(kāi)eclipse,F(xiàn)ile->Import->Maven->Existing Maven project->選擇路徑,就可以看到新建的工程->Finish。


  •  通過(guò)范例介紹Selenium-WebDriver API
    工程新建完畢,你可以體會(huì)到WebDriver和其他普通的庫(kù)一樣:它十分完善,通常你不需要在使用它前再做其他補(bǔ)充步驟或安裝,這點(diǎn)比Selenium-RC可方便多了。


        注意:使用ChromeDriver,Opera Driver,Android Driver或iOS Driver需要再增加相應(yīng)的操作。


        現(xiàn)在你已經(jīng)可以開(kāi)始編程了,先用這個(gè)范例練練手吧。此范例通過(guò)谷歌搜索“Cheese”并打印頁(yè)面的標(biāo)題。


 

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)
      {
             //【個(gè)人筆記】如果程序報(bào)錯(cuò)找不到路徑:
             //System.setProperty( "WebDriver.Firefox.bin", "找到Firefox.exe的安裝路徑,復(fù)制路徑");
             //Syste.setProperty("WebDriver.chromedriver.exe", "同上");
             
             // 創(chuàng)建一個(gè) Firefox driver的實(shí)例
             // 注意,接下來(lái)的代碼依賴于接口(即WebDriver)
             // 而不是實(shí)現(xiàn)(即FirefoxDriver)
             // 注:FirefoxDriver implements WebDriver
            WebDriver driver = new FirefoxDriver();
            
             // 訪問(wèn)谷歌【打不開(kāi)谷歌就換百度】
             driver .get("http://www.google.com" );
             // 你也可以用以下語(yǔ)句實(shí)現(xiàn)訪問(wèn)動(dòng)作
             // driver.navigate().to("
              
             // 通過(guò)name來(lái)定位搜索框元素【百度 By.name("wd")】
            WebElement element = driver .findElement(By.name ("q" ));
            
             // 搜索cheese!
             element .sendKeys("Cheese!" );
             
             // 提交. WebDriver會(huì)為我們執(zhí)行搜索動(dòng)作
             element .submit();
             
             // 確認(rèn)下頁(yè)面title
            System. out .println("Page title is: " + driver.getTitle());
            
             // 谷歌【百度】的搜索是使用JavaScript進(jìn)行動(dòng)態(tài)呈現(xiàn)
             // 等待頁(yè)面的加載,倒計(jì)時(shí)十秒
            ( 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());
            
             //關(guān)閉瀏覽器
             driver .quit();
      }
}


        【個(gè)人筆記】

         我選擇ChromeDriver實(shí)現(xiàn)段代碼, 運(yùn)行時(shí),eclipse console窗口總是出現(xiàn)一行文字“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.

          也就是說(shuō),ChromeDriver在本機(jī)生成一個(gè)server,server通過(guò)本機(jī)的一個(gè)開(kāi)放端口進(jìn)行監(jiān)聽(tīng),收集上層的請(qǐng)求,操控本機(jī)的chrome瀏覽器。那當(dāng)然就是“只能允許本地連接”了。根據(jù)stackoverflow最高票的回答,這句話只是一句提示性的信息而已。

http://stackoverflow.com/questions/25080500/when-run-webdriver-with-chrome-browser-getting-message-only-local-connection

          


  • Selenium-WebDriver API 命令和操作

    • 讀取網(wǎng)頁(yè)
      driver.get("http://www.google.com");
      WebDriver不一定會(huì)等待頁(yè)面的加載,這其中有幾個(gè)因素的影響,包括何種操作系統(tǒng)搭配何種瀏覽器。在某些情況下,WebDriver可能會(huì)在頁(yè)面加載之前,甚至加載一開(kāi)始或加載中,返回control(【個(gè)人筆記】目前理解等同于Java的Event)。為了保證健壯性(【個(gè)人筆記】什么的健壯性?),你要使用顯性/隱性等待來(lái)等待element(s)的出現(xiàn)。

    • 定位UI元素
      定位元素可通過(guò)WebDriver的實(shí)例或通過(guò)WebElement來(lái)實(shí)現(xiàn)。每種綁定語(yǔ)言(Selenium支持的語(yǔ)言)都有“Find Element”和“Find Elements”方法。前一個(gè)方法返回符合查詢的WebElement對(duì)象,如果元素不存在則拋出異常。后一種方法返回一個(gè)含多個(gè)WebElement的list,如果查詢無(wú)結(jié)果則返回一個(gè)空表。
      “Find”方法需要搭配“By”來(lái)使用。

      未完待續(xù)...











向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI