Selenium:WebDriver簡介及元素定位


原文地址: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看看。。。

 

 

轉載請注明出處,商用請征得作者本人同意,謝謝!!!


免責聲明!

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



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