ruby/python/java全覆蓋的Selenium-Webdriver系列教程(2)————瀏覽器的簡單操作


上一講我們介紹了如何部署selenium 2.0的開發環境,這一講我們將介紹如何使用selenium提供給我們的接口進行瀏覽器的簡單操作。

本文將先介紹適合初級用戶的一些常用方法,然后將對一些高級用法和實現源碼進行稍微深入一些的分析。

如何打開一個測試瀏覽器

做自動化測試一般情況下我們都需要首先打開測試瀏覽器,瀏覽器開啟后我們方可”命令”瀏覽器去打開新頁面,點擊特定的鏈接,判斷具體的邏輯等等。因此該操作為”萬里長征的第一步”,必須給以重視。具體代碼如下。需要注意的是如果使用chrome進行測試,那么必須下載安裝chrome driver,如果是ie的話,目前必須下載ie driver,另外還需要注意ie的保護模式設置。具體細節參考這里

    require 'rubygems'  # for ruby 187 only
    require 'selenium-webdriver'  
    # 打開firefox  
    dr = Selenium::WebDriver.for :firefox  
    #dr = Selenium::WebDriver.for :ff  
    dr.quit
    # 打開ie  
    dr = Selenium::WebDriver.for :ie  
    dr.quit
    #dr = Selenium::WebDriver.for :internet_explorer  
    # 打開chrome  
    dr = Selenium::WebDriver.for :chrome  
    dr.quit

    from selenium import webdriver

    driver = webdriver.Firefox()
    driver.quit()

    driver = webdriver.Chrome()
    driver.quit()

    driver = webdriver.Ie()
    driver.quit()

    // 文件OpenBrowser.java
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.ie.InternetExplorerDriver;
    public class OpenBrowser {

        public static void main(String[] args) {
            WebDriver driver = new ChromeDriver();
            driver.quit();

            # 設置firefox的安裝路徑
            System.setProperty("webdriver.firefox.bin","D:\\Program Files\\Mozilla Firefox\\firefox.exe");
            WebDriver driver2 = new FirefoxDriver();
            driver2.quit();

            WebDriver driver3 = new InternetExplorerDriver();
            driver3.quit();
        }
    }

如何訪問1個具體的url

打開瀏覽器后我們需要轉到我們的測試站點,也就是要訪問1個url。下面的代碼可以達成這個目的。

    require 'rubygems'  # for ruby 187 only
    require 'selenium-webdriver'  
    dr = Selenium::WebDriver.for :chrome 
    # 使用get方法  
    dr.get 'http://www.baidu.com'  
    dr.quit()

    from time import sleep
    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get('http://www.baidu.com')
    driver.quit()

    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    public class OpenBrowser {

        public static void main(String[] args) {
            WebDriver driver = new ChromeDriver();
            driver.get("http://www.baidu.com");
            driver.quit();
        }
    }

如何關閉瀏覽器

測試結束后往往需要關閉瀏覽器,可以使用driver.quit()或者是driver.close()方法。

這兩個方法的異同點是:

  • quit可以關閉driver打開的所有瀏覽器窗口,而close只是關閉當前窗口;
  • quit可以關閉與driver的連接,而close依然保留連接。如果你不能理解這個的話,你可以這樣簡單的認為quit的話會關閉掉driver,而close的不會。因此你使用close關閉了瀏覽器后,在某些情況下你可以看到仍然存在chromedriver或者iedriverserver進程。

如何返回當前頁面的url

這個功能的典型應用場景是:點擊一個鏈接,這時候瀏覽器跳轉到新的頁面。測試人員需要判斷新頁面的url以檢查這個鏈接的跳轉是否正確。

下面的代碼演示了在百度首頁點擊"百科"這個鏈接,跳轉到百度百科頁面后判斷該頁面的url是否正確

    # encoding: utf-8
    require 'rubygems'  # for ruby 187 only
    require 'selenium-webdriver'  
    dr = Selenium::WebDriver.for :chrome  
    url = 'http://www.baidu.com'  
    dr.get url  

    dr.find_element(link_text: '百科').click
    puts 'correct' if dr.current_url == 'http://baike.baidu.com/'

    # -*- coding: utf-8 -*- 
    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get('http://www.baidu.com')
    driver.find_element_by_link_text('百科').click()
    if driver.current_url == 'http://baike.baidu.com/': print 'correct'
    driver.quit()

    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    public class OpenBrowser {

        public static void main(String[] args) {
            WebDriver driver = new ChromeDriver();
            driver.get("http://www.baidu.com");
            driver.findElement(By.linkText("百科")).click();
            System.out.println(driver.getCurrentUrl());
            if(driver.getCurrentUrl().equals("http://baike.baidu.com/")){
                System.out.println("correct");
            }
            driver.quit();
        }   
    }

如何返回當前頁面的title

這個功能的應用場景跟返回頁面url的情形差不多。

    require 'rubygems'  
    require 'selenium-webdriver'  
    dr = Selenium::WebDriver.for :chrome 
    url = 'http://www.qq.com'  
    dr.get url  
    puts dr.title  
    dr.quit

    from selenium import webdriver
    driver = webdriver.Chrome()
    driver.get('http://www.qq.com')
    print driver.title
    driver.quit()

    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    public class OpenBrowser {
        public static void main(String[] args) {
            WebDriver driver = new ChromeDriver();
            driver.get("http://www.baidu.com");
            driver.findElement(By.linkText("百科")).click();
            System.out.println(driver.getTitle());
            driver.quit();
        }   
    }

其他方法或屬性

在這里僅僅討論一些簡單的屬性和方法,更加復雜的方法會在后面慢慢討論。

ruby

  • window_handles : 返回當前所有打開瀏覽器的窗口句柄
  • window_handle : 返回當前的瀏覽器的窗口句柄
  • page_source : 返回當前頁面的源碼
  • visible? : 當前瀏覽器是否可見,並不保證支持所有瀏覽器

python

  • window_handles : 返回當前所有打開瀏覽器的窗口句柄.注意,這是屬性,不是方法;
  • current_window_handle : 返回當前的瀏覽器的窗口句柄.注意,這是屬性,不是方法;
  • page_source : 返回當前頁面的源碼.注意,這是屬性,不是方法;
  • name : 返回當前瀏覽器的名稱.注意,這是屬性,不是方法;

java

  • getWindowHandles() : 返回當前所有打開瀏覽器的窗口句柄
  • getWindowHandle() : 返回當前的瀏覽器的窗口句柄
  • getPageSource() : 返回當前頁面的源碼

深入討論

ruby 源碼中,操作瀏覽器的方法主要封裝在lib\selenium\webdriver\common\driver.rb文件中。 該文件定義了Selenium::WebDriver::Driver類。我們啟動瀏覽器就是調用這個類的for方法。

python源碼中,操作瀏覽器的方法主要封裝在selenium\webdriver\remote\webdriver.py文件中。 該文件定義了Remote WebDriver類。該類是其他具體的driver,如Chrome WebDriver的父類,實現了大多數的公用方法。

java源碼中,操作瀏覽器的方法主要封裝在org\openqa\selenium\remote\RemoteWebDriver.java文件中。 該文件定義了RemoteWebDriver類。該類是其他具體的driver,如Chrome WebDriver的父類,實現了WebDriver和JavascriptExecutor接口。

接下來

這一節討論了瀏覽器的簡單操作,下一節我們將討論如何在頁面上執行js代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM