Selenium Python bindings 文檔一

來源:互聯網
上載者:User
  1. 安裝

1.1    介紹

Selenium Python bindings提供了一個簡單的API使用Selenium WebDriver來寫功能、驗收測試。通過Selenium Python API你可以以比較直白的方式使用Selenium的所有功能。

Selenium Python bindings提供了一個方便的API來訪問Selenium Webdrivers比如Firefox,IE和Chrome, 目前支援的Python版本是Python2.6和Python2.7.Python3現在還不支援。Selenium伺服器是一個Java程式。 推薦使用JRE1.6或更新的版本來跑Selenium 伺服器。本文主要解釋了如何使用Selenium2和WebDriver API。

1.2    為Selenium下載Python bindings
你可以在PyPi page for selenium package 下載Selenium的Python binding。它有個依賴庫rdflib,版本3.1.x。你也可以使用easy_install或者pip來安裝bindings:easy_install selenium 或者 pip install selenium。或者你可以考慮使用virtualenv來建立獨立的Python環境。

1.3   
Windows使用者的詳細指示

注意:為完成安裝,必須有網路連接

  1. 安裝Python2.7,在這裡使用MSI版本安裝檔案
  2. 安裝virtualenv,下載這個Python指令碼
  3. 建立虛擬環境(你必須在virtual.py所在的目錄): C:\Python27\python.exe virtualenv,py
    selenv,這個步驟將建立一個selenv目錄用來安裝selenium
  4. 安裝selenium:selenv\Scripts\pip.exe install selenium
  5. 現在你在這個虛擬環境裡可以運行你的Python指令碼: selenv\Scripts\python.exe
    my_selenium_script.py

1.4   
下載Selenium 伺服器

注意:只有在要使用遠程WebDriver的時候才需要Selenium伺服器。

可以在這裡下載Selenium server 2.x。檔案名稱應該像這樣: selenium-server-standalone-2.x.x.jar。你可以一直下載最新的2.x版本。

如果你的電腦沒有安裝JRE,可以到這裡下載一個。

1.5   
運行Selenium server

必須要在作業系統裡安裝JRE。如果java命令在PATH(環境變數)裡可用。可以使用下面的命令來啟動Selenium server。用實際你下載的Selenium server版本號碼替代2.x.x。java -jar selenium-server-standalone-2.x.x.jar
 
2.      開始
2.1 簡單使用說明

如果你已經安裝了Selenium server和Python bindings,而且可以運行server,可以通過下面的指令碼來開始使用。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
 
driver = webdriver.Firefox()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.send_keys("selenium")
elem.send_keys(Keys.RETURN)
assert "Google" in driver.title
driver.close()

上面的指令碼可以儲存成一個檔案(比如:python_org_search.py),然後可以這樣運行:

Python python_org_search.py

你使用的python必須安裝selenium模組。

2.2 過一下這個例子

Selenium.webdriver模組提供了所有的WebDriver實現。目前支援Webdriver實現的瀏覽器有Firefox,Chrome,IE和遠程。Keys類提供了鍵盤上的鍵,如斷行符號,F1,ALT等。

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

接下來, 建立Firefox Webdriver的執行個體

driver = webdriver.Firefox()

driver.get方法將跳轉到URL指定的頁面。 Webdriver在返回你測試或指令碼的控制之前,將會等待直到頁面完全載入(也就是說,激發了“onload“事件)。如果你頁面在load的時候使用了很多AJAX就不值得這麼做,因為Webdriver也許不知道什麼時候會完全載入。

driver.get("http://www.python.org")

下一行是一個斷言來確定標題裡是否含有“Python“字樣。

assert "Python" in driver.title

Webd提供了很多方法使用任一個find_element_by_*方法來尋找元素。比如,輸入框元素可以通過它的名字屬性使用find_element_by_name方法來定位。

elem = driver.find_element_by_name("q")

下面,我們發送鍵盤指令,這和使用鍵盤敲擊鍵很類似。特殊的鍵可以使用selenium.webdriver.common.keys的Keys類來發送指令。

elem.send_keys("selenium")

elem.send_keys(Keys.RETURN)

在提交頁面之後,你應該到了Google頁面。

assert "Google" in driver.title

最後,瀏覽器視窗關閉。也可以調用quit方法來代替close方法。Quit方法將退出整個瀏覽器,而close只是關掉一個tab。但是如果只有一個tab。預設大部分的瀏覽器將完全退出。

Driver.close()

2.3 使用Selenium寫測試

Selenium主要被用來寫測試案例。你可以使用Python的unittest模組來寫測試案例。下面是一個使用unittets模組的修改版本。主要用來測試Python的搜尋功能。

import unittest

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

 

class PythonOrgSearch(unittest.TestCase):

 

    def setUp(self):

        self.driver = webdriver.Firefox()

 

    def test_search_in_python_org(self):

        driver = self.driver

        driver.get("http://www.python.org")

        self.assertIn("Python", driver.title)

        elem = driver.find_element_by_name("q")

        elem.send_keys("selenium")

        elem.send_keys(Keys.RETURN)

        self.assertIn("Google", driver.title)

 

    def tearDown(self):

        self.driver.close()

 

 

if __name__ == "__main__":

unittest.main()

結果如下:

Finding files... done.

Importing test modules ... done.

 

----------------------------------------------------------------------

Ran 1 test in 23.579s

 

OK

2.4 過一下這個例子

最初,先引入需要的所有基本模組。Unittest是一個基於Java的Uunit的Python內建模組,這個模組提供了組織測試案例的架構.selenium.webdirver模組提供了所有的WebDriver實現。

import unittest

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

測試案例類繼承自unittest.TestCase。繼承自TestCase類是告訴unittest模組的方式,即,這是個測試案例:

class PythonOrgSearch(unittest.TestCase):

setup方法是初始化的一部分,這個方法將在你寫的每個測試功能之前被調用,這裡是建立了Firefox WebDriver的執行個體

    def setUp(self):

        self.driver = webdriver.Firefox()

這是個測試案例方法。方法的第一行建立了一個到在setUp方法裡建立的driver丟下的本地引用。

    def test_search_in_python_org(self):

        driver = self.driver

driver.get方法將跳轉到URL指定的頁面。

driver.get("http://www.python.org")

下一行是個斷言來確定標題裡面有Python字樣。

self.assertIn("Python", driver.title)

注意:assertIn API僅在Python2.7 unittest模組裡可用。

Teardown方法將在每個測試方法之後被調用。這裡主要用來做所有的cleanup工作。在當前這個方法裡,瀏覽器視窗被關掉。

    def tearDown(self):

        self.driver.close()

最後的幾行是用來運行這個測試組件。

if __name__ == "__main__":

    unittest.main()

2.5 和遠程WebDriver一起使用Selenium

為使用遠程WebD,必須先運行Selenium伺服器,可以使用下面的命令啟動Selenium服務。

Java –jar selenium-server-standalone-2.x.x.jar

當運行Selenium服務的時候,你可以看到類似下面的訊息:

15:43:07.541 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
上面幾行是說,你可以使用這個URL連到遠程WebD。下面是具體例子:

from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

 

driver = webdriver.Remote(

   command_executor='http://127.0.0.1:4444/wd/hub',

   desired_capabilities=DesiredCapabilities.CHROME)

 

driver = webdriver.Remote(

   command_executor='http://127.0.0.1:4444/wd/hub',

   desired_capabilities=DesiredCapabilities.OPERA)

 

driver = webdriver.Remote(

   command_executor='http://127.0.0.1:4444/wd/hub',

   desired_capabilities=DesiredCapabilities.HTMLUNITWITHJS)

desired_capabilities是個字典,可以使用自己的設定來取代預設設定:

driver = webdriver.Remote(

   command_executor='http://127.0.0.1:4444/wd/hub',

   desired_capabilities={'browserName': 'htmlunit',

                         'version': '2',

                        'javascriptEnabled': True})

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.