[譯]Selenium Python文檔:二、初步開始


2.1.簡單使用

如果已經安裝好了Selenium Python,你就可以像下面這樣編寫Python代碼來使用它了:

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.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()

上面的腳本可以保存到一個文件(例如:python_org_search.py)。接着,可以像下面這樣來運行它(你應該確保要使用的Python已經正確安裝了selenium模塊):

$python python_org_search.py

2.2.示例講解

selenium.webdriver模塊提供了所有的WebDriver實現。當前Selenium支持的WebDriver實現由火狐、Chrome、IE和遠程。Keys類提供了鍵盤按鍵的鍵值,如RETURNF1ALT等。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

接着,Firefox WebDriver實例被創建:

driver = webdriver.Firefox()

driver.get方法根據給定的URL訪問Web 頁面。在將控制權交給你的測試腳本之前,WebDriver將會等待頁面完全加載(也就是說,等待onload事件被觸發)。值得注意的是如果你的頁面在加載的時候使用了大量的AJAX,WebDriver有可能不知道它是否已經加載完成:

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

接下來的一行是一個斷言,用來確保標題中有“Python”這個單詞:

assert "Python" in driver.title

WebDriver為尋找頁面元素提供了大量方法,他們都是find_element_by_*的形式。舉個例子,input text元素可以根據他的name值使用find_element_by_name來進行定位。在后續的元素定位那一章將會對元素定位做更為詳細的介紹。

elem = driver.find_element_by_name("q")

接下來我們發送了一個“按鍵”值,這和你使用鍵盤的輸入非常相似。特殊案件可以通過從selenium.webdriver.common.keys導入的Keys類進行發送。安全起見,我們首先清除輸入框中的預置文本(比如,“搜索”,"Serach")。以保證它不會影響我們的搜索結果:

elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)#Keys.ENTER

在頁面提交之后,你應該會得到相應的搜索結果。為了保證一些結果被找到,作一個斷言:

assert "No results found." not in driver.page_source

最后,關閉瀏覽器窗口。你也可以調用quit來代替close方法。quit將會關閉整個瀏覽器,而close將會僅關閉一個標簽頁。如果只打開了一個標簽頁的話,大多數瀏覽器默認會關閉整個瀏覽器:

driver.close()

2.3.使用Selenium編寫測試

Selenium常被用於編寫測試樣例。selenium包本身並不提供測試工具/框架,你可以使用Python的unittest模塊來編寫測試。另外可選的測試工具/框架是py.test和nose。

本章我們選擇使用unittest做測試框架。這里是經修改的unittest模塊使用樣例。本腳本用來測試python.org的搜索功能:

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("pycon")
        elem.send_keys(Keys.RETURN)
        assert "No results found." not in driver.page_source


    def tearDown(self):
        self.driver.close()

if __name__ == "__main__":
    unittest.main()

你可以從命令行來運行上面的測試樣例,如:

python test_python_org_search.py
.
----------------------------------------------------------------------
Ran 1 test in 15.566s

OK

上面的結果表明測試已經成功完成。

2.4.通覽示例

首先,加載所有需要的基礎模塊。unittest是基於Java JUnit的Python自建模塊。該模塊提供了組織測試樣例的框架。selenium.driver模塊提供了所有的WebDriver實現。當前支持的WebDriver實現有:火狐、Chrome、IE和遠程。類提供了鍵盤按鍵的鍵值,如RETURN、F1、ALT等。

import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

test case類繼承自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訪問Web 頁面。在將控制權交給你的測試或者腳本之前,WebDriver將會等待頁面完全加載(也就是說,等待onload事件被觸發)。值得注意的是如果你的頁面在加載的時候使用了大量的AJAX,WebDriver有可能不知道它是否已經加載完成:

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

接下來的一行是一個斷言,用來確保標題中有“Python”這個單詞:

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

WebDriver為定位頁面元素提供了大量方法,他們都是find_element_by_*的形式。舉個例子,input text元素可以根據他的name值使用find_element_by_name定位。在后續的元素定位那一章將會對元素定位做更為詳細的介紹。

elem = driver.find_element_by_name("q")

接下來我們發送了一個“按鍵”值,這和你使用鍵盤的輸入非常相似。特殊案件可以通過從selenium.webdriver.common.keys導入的Keys類進行發送。安全起見,我們首先清除輸入框中的預置文本(比如,“搜索”,"Serach")。以保證它不會影響我們的搜索結果:

elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)#Keys.ENTER

在頁面提交之后,你應該會得到相應的搜索結果。為了保證一些結果被找到,作一個斷言:

assert "No results found." not in driver.page_source

tearDown方法將會在所有的測試方法執行之后調用。此函數用來做一些清理工作。在當前方法中,清理工作是關閉瀏覽器。你也可以調用quit方法來代替close方法。quit將會關閉整個瀏覽器,而close將會僅關閉一個標簽頁。如果只打開了一個標簽頁的話,大多數瀏覽器默認會關閉整個瀏覽器:

def tearDown(self):
    self.driver.close()

最后一行用來運行測試套件:

if __name__ == "__main__":
    unittest.main()

2.5.通過遠程WebDriver使用Selenium

要使用遠程WebDriver,你應該先運行Selenium server。可以使用下面的命令啟動它:

java -jar selenium-server-standalone-2.x.x.jar

Selenium server啟動之后你可以看到像下面的一條消息:

15:43:07.541 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub

上面那行說明你可以使用這個URL來連接遠程WebDriver。這里是一些示例:

from selenium import webdriver
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})


免責聲明!

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



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