Selenium自動化測試網頁

少年版發表於2019-02-16

今天想跟大家分享的是:
關於selenium的自動化測試一些基礎的東西

安裝環境

1.Python環境
安裝完成後通過Windows命令提示符CMD輸入“python”,檢視是否安裝成功

2.安裝setuptools與pip
setuptools是PEAK(Python enterprise Application Kit)的一個副專案,是python的distutilsde的增強工具,可以更方便建立和釋出python包,特別是對其他包有依賴的情況;
pip是一個安裝和管理python包的工具,通過pip來安裝python包將變得很簡單,省去了繁瑣的過程,pip的安裝依賴於setuptools,安裝pip之前需要先安裝setuptools;

3.下載selenium包
pip install selenium

4.下載瀏覽器驅動
火狐和谷歌各有各的驅動
下載連結:https://www.seleniumhq.org/do…

簡單示例

示例名稱: test_python_org_search.py

import unittest
#引入 unittest 模組是基於JAVA JUnit的Python內建的模組。 該模組提供了一個框架去組織測試用例
from selenium import webdriver
#selenium.webdriver 模組提供了所有WebDriver的實現
from selenium.webdriver.common.keys import Keys
# Keys 類提供所有的鍵盤按鍵操作
class PythonOrgSearch(unittest.TestCase):
#測試類繼承自 unittest.TestCase. 繼承 TestCase 類是告訴 unittest 模組該類是一個測試用例
    def setUp(self):
        self.driver = webdriver.Firefox()
        #SetUp 方法是初始化的一部分,建立了一個Firefox WebDriver的一個例項
    def test_search_in_python_org(self):
        driver = self.driver
        driver.get("http://www.python.org")
        #driver.get 方法將會根據方法中給出的URL地址開啟該網站
        self.assertIn("Python", driver.title)
        #使用assert斷言的方法判斷在頁面標題中是否包含 “Python”
        elem = driver.find_element_by_name("q")
        #找到name為q的DOM節點
        elem.send_keys("pycon")
        #在name為q的DOM節點中,輸入pycon
        elem.send_keys(Keys.RETURN)
        #按enter鍵
        assert "No results found." not in driver.page_source


    def tearDown(self):
        self.driver.close()
    #tearDown 方法會在每一個測試方法執行之後被執行。 該方法可以用來做一些清掃工作,比如關閉瀏覽器。 當然你也可以呼叫 quit 方法代替`close`方法
    #區別:quit 將關閉整個瀏覽器,而`close`只會關閉一個標籤頁

if __name__ == "__main__":
    unittest.main()
    #入口函式

可直接在shell中執行:python test_python_org_search.py

常用方法講解

1.開啟一個頁面
driver.get(“http://www.baidu.com”)
WebDriver 將等待,直到頁面完全載入完畢(其實是等到 onload 方法執行完畢), 然後返回繼續執行你的指令碼。 值得注意的是,如果你的頁面使用了大量的Ajax載入, WebDriver可能不知道什麼時候頁面已經完全載入。

2.與頁面互動
WebDriver 提供了大量的方法幫助你去查詢元素,例如

<input type="text" name="passwd" id="passwd-id" />

可通過以下方法查詢:

element = driver.find_element_by_id("passwd-id")
element = driver.find_element_by_name("passwd")
element = driver.find_element_by_xpath("//input[@id=`passwd-id`]")

你還可以通過連結的文字查詢他,需要注意的是,這個文字必須完全匹配。 當你使用XPATH時,你必須注意,如果匹配超過一個元素,只返回第一個元素。 如果上面也沒找到,將會丟擲 NoSuchElementException異常。

執行一些操作,例如
在文字框中輸入一些內容:element.send_keys(“some text”)
清除內容:element.clear()

選擇下拉框:WebDriver的支援類有一個叫做 Select的類
from selenium.webdriver.support.ui import Select
select.select_by_index(index)根據option的順序
select.select_by_visible_text(“text”)根據文字
select.select_by_value(value)根據它的value值

取消選擇:select.deselect_all()

提交選擇:element.submit()

3.拖放

element = driver.find_element_by_name("source")
target = driver.find_element_by_name("target")

from selenium.webdriver import ActionChains
action_chains = ActionChains(driver)
action_chains.drag_and_drop(element, target).perform()

4.彈出對話方塊處理方式
alert = driver.switch_to_alert()
switch_to_alert()   #定位彈出對話
text()    #獲取對話方塊文字值
accept() #相當於點選”確認”
dismiss() #相當於點選”取消”
send_keys() # 輸入值,這個alert和confirm沒有輸入對話方塊,所以這裡就不能用了,所以這裡只能使用在prompt這裡。

5.操作cookie
開啟一個頁面 driver.get(“http://www.example.com”)
現在設定Cookies,這個cookie在域名根目錄下(”/”)生效 cookie = {‘name’ : ‘foo’, ‘value’ : ‘bar’} driver.add_cookie(cookie)
現在獲取所有當前URL下可獲得的Cookies driver.get_cookies()

6.查詢元素
find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

以上是selenium相關的基礎內容,下一期更新使用頁面物件模式的示例,
一起越來越好.

相關文章