原文地址:https://www.cnblogs.com/imyalost/p/7242747.html
Selenium:WebDriver簡介及元素定位
參考內容:官方API文檔,下載鏈接:http://download.csdn.net/detail/kwgkwg001/4004500
蟲師:《selenium2自動化測試實戰-基於python語言》
一、WebDriver原理
1、關於WebDriver
設計模式:按照Server-Client的經典設計模式設計;
Server端:即Remote Server(遠程服務器),可以是任意的瀏覽器,當腳本啟動瀏覽器時,該瀏覽器就是Remote Server,它的職責是等待Client發送請求並做出響應;
Client端:簡單來說就是我們的測試代碼,測試代碼中的一些行為是以HTTP請求的方式發送給被測試瀏覽器——Remote Server,Remote Server接受請求,執行相應操作,
並在Response中返回執行狀態、返回值等信息;
2、WebDriver工作流程
①WebDriver啟動目標瀏覽器,並綁定至指定端口,啟動的瀏覽器實例將作為WebDriver的Remote Server;
②Client端通過CommandExcuter發送HTTPRequest給Remote Server的偵聽端口(通信協議:the webdriver wire protocol);
③Remote Server需要依賴原生的瀏覽器組件(比如:chromedriver.exe)來轉化瀏覽器的native調用;
3、WebDriver.log
python提供了logging模塊給運行中的應用,提供了一個標准的信息輸出接口。它提供了basicConfig方法用於基本信息的定義,開啟debug模塊,
就可以捕捉到Client端向Server端發送的請求,例子如下:
1 # coding=utf-8 2 # 導入logging模塊,捕捉Client發送的請求 3 from selenium import webdriver 4 import logging 5 from selenium import webdriver 6 from selenium.webdriver.support.select import Select # select類 7 from selenium.webdriver.common.by import By #By類:定位元素 8 9 logging.basicConfig(level=logging.DEBUG) 10 driver = webdriver.Chrome("F:\安裝工具\python\chromedriver.exe") 11 driver.get("www.baidu.com") 12 13 driver.find_element_by_id("kw").send_keys("selenium") 14 driver.find_element_by_id("su").click() 15 driver.quit()
二、WebDriver定位方法
WebDriver是基於selenium設計的操作瀏覽器的一套API,針對多種編程語言都實現了這套API,站在python角度來說,WebDriver是python的一個用於實現Web自動化的第三方庫。
1、WebDriver定位方法
WebDriver定位方法提供了八種元素定位方法,所對應的方法、特性分別是:
2、XPath和CSS的類似功能對比
3、用By定位元素
針對前面介紹的8種定位方法,WebDriver還提供另一種方法,即:統一調用find_element()方法,通過By來聲明定位方法,並且傳入對應定位方法的定位參數,例子如下:
find.element()方法只用於定位元素,它需要兩個參數,第一個參數是定位的類型,由By提供,第二個參數是定位的具體方式,在使用By之前需要將By類導入;
1 # 導入By類的包 2 from selenium.webdriver.common.by import By 3 find.element(by.id,"kw") 4 find.element(by.name,"wd") 5 find.element(by.class_name,"s_ipt") 6 find.element(by.tag_name,"input") 7 find.element(by.link_text,"新聞") 8 find.element(by.partial_link_text,"新") 9 find.element(by.xpath,"//*[@class='bg s_btn'") 10 find.element(by.css_selector,"span.bg s_btn_wr>input#su")
4、定位一組元素
上面提到的8種定位方法,都是針對單個元素定位的,webdriver還提供了與之對應的8種用於定位一組元素的方法。其一般應用於以下場景:
①批量操作元素,例如勾選頁面上所有的復選框;
②先獲取一組元素,再從這組元素中過濾出需要操作的元素;
定位一組元素的方法與定位單個元素的用法相似,唯一的區別是在element后面多一個s表示復數,具體如下:
1 # webdriver提供的定位一組元素方法 2 id find_elements_by_id() 3 Name find_elements_by_name() 4 class_name find_elements_by_class_name() 5 tag Name find_elements_by_tag_name() 6 link text find_elements_by_link_text() 7 partial link text find_elements_by_partial_link_text() 8 xpath find_elements_by_xpath() 9 css selector find_elements_by_css_selector()
獲取一組元素中某個元素的幾個方法:
len():用來計算元素的個數,通過print()打印出計算的結果;
pos()或pop(-1):默認獲取一組元素的最后一個元素,並返回該元素的值;
pop(0):默認獲取一組元素的第一個元素,並返回該元素的值;
pop(1):默認獲取一組元素的第二個元素,並返回該元素的值;
......
三、WebElement接口常用方法
通常需要與頁面交互的方法都由WebElement接口提供,包括上面提到的8種定位方法,下面介紹常用的幾種方法:
submit():用於提交表單,例如搜索框輸入關鍵字之后的“回車”操作,例如:
1 # 提交表單 2 from select import webdriver 3 driver = webdriver.Chrome("安裝工具\python\chromedriver.exe") 4 driver.get("http://www.baidu.com") 5 driver.find_element_by_id("kw").send_keys("imyalost") 6 # 提交輸入框中的內容 7 driver.find_element_by_id("imyalost").submit() 8 driver.quit()
注意:有時候submit()方法和click()方法可以互用,但submit()的應用范圍不及click()廣泛;
clear():清除文本;
send_keys(*value):模擬按鍵輸入;
click():單擊元素;
size:返回元素的尺寸;
text:獲取元素的文本;
get.attribute(name):獲得屬性值;
is_displayed():設置該元素是否用戶可見;
1 # webelement接口常用方法 2 from selenium import webdriver 3 driver = webdriver.Chrome("安裝工具\python\chromedriver.exe") 4 driver.get("http://www.baidu.com") 5 # 獲得輸入尺寸 6 size = driver.find_element_by_id("kw").size 7 print("size") 8 # 返回百度頁面底部備案信息 9 text = driver.find_element_by_id("cp").text 10 print("text") 11 # 返回元素的屬性值,可以是id、name、type或其他屬性 12 attribute = driver.find_element_by_id("kw").get_attribute("type") 13 print("attribute") 14 # 返回元素結果是否可見,返回結果為True或Flase 15 result = driver.find_element_by_id("kw").is_displayed() 16 print("result")
PS:上面的例子取自百度首頁,關於UI自動化,建議系統的了解學習一下前端相關的基礎知識,可以去W3C看看。。。