-
WebDriver瀏覽器的屬性
WebDriver 提供了很多屬性來支持對瀏覽器的操作,例如,獲取測試地址、多窗口的處理、獲取瀏覽器名稱等,具體介紹如下
1.1 獲取測試的地址
獲取測試的地址用到的方法是current_url,也就是獲取當(dāng)前測試的具體URL。以百度首頁為例,獲取的地址就是百度首頁的地址,實現(xiàn)的測試代碼如下:
from selenium import webdriver
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('https://wwww.baidu.com/')
driver.implicitly_wait(30)
print('測試地址為:{0}'.format(driver.current_url))
driver.quit()
顯示:
D:\python3\python.exe C:/Users/Administrator/Desktop/testpy/baidu.py
測試地址為:https://www.baidu.com/
Process finished with exit code 0
1.2 獲取當(dāng)前頁面代碼
獲取當(dāng)前測試頁面的代碼用到的方法是 page_source。以百度首頁為例,要想獲取百度首頁的頁面代碼,實現(xiàn)的代碼如下
from selenium import webdriver
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('https://wwww.baidu.com/')
driver.implicitly_wait(30)
print('頁面代碼如下:{0}'.format(driver.page_source))
driver.quit()
顯示:
D:\python3\python.exe C:/Users/Administrator/Desktop/testpy/baidu.py
頁面代碼如下:<html><head><script type="text/javascript" charset="utf-8" src="https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/js/components/qrcode-7c53a95a4e.js"></script><script type="text/javascript" charset="utf-8"
...(此處省略1萬字...)
Process finished with exit code 0
1.3 獲取當(dāng)前的Title
獲取當(dāng)前的Title,即獲取當(dāng)前測試頁面的標(biāo)題。例如,百度首頁的Title 是“百度一下,你就知道”。獲取Title的測試代碼為:
from selenium import webdriver
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('https://wwww.baidu.com/')
driver.implicitly_wait(30)
print('百度首頁的Title為:{0}'.format(driver.title))
driver.quit()
顯示:
D:\python3\python.exe C:/Users/Administrator/Desktop/testpy/baidu.py
百度首頁的Title為:百度一下,你就知道
Process finished with exit code 0
1.4 頁面的前進和后退
前進用到的方法是forward,后退用到的方法是back。以百度首頁搜索首頁為例,要實現(xiàn)先打開百度首頁,再搜索python,點擊,再后退到百度首頁,然后再搜索python,點擊。實現(xiàn)的測試代碼為:
from selenium import webdriver
import time
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('https://wwww.baidu.com/')
print('測試地址為:{0}'.format(driver.current_url))
driver.find_element_by_id("kw").send_keys("python")
driver.find_element_by_id("su").click()
time.sleep(2)
print('測試地址為:{0}'.format(driver.current_url))
driver.back()
print('測試地址為:{0}'.format(driver.current_url))
time.sleep(2)
driver.forward()
print('測試地址為:{0}'.format(driver.current_url))
driver.quit()
D:\python3\python.exe C:/Users/Administrator/Desktop/testpy/baidu.py
測試地址為:https://www.baidu.com/
測試地址為:https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=python&fenlei=256&rsv_pq=dec74e9600001e47&rsv_t=8f2d4SuWy%2FMiUdZ4C5d%2FHMJONsHAi2WHUU4CBacxV95sOc%2FiN8f0Tr%2B9xvU&rqlang=cn&rsv_dl=tb&rsv_enter=0&rsv_sug3=6&rsv_btype=i&inputT=182&rsv_sug4=182
測試地址為:https://www.baidu.com/
測試地址為:https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=python&fenlei=256&rsv_pq=dec74e9600001e47&rsv_t=8f2d4SuWy%2FMiUdZ4C5d%2FHMJONsHAi2WHUU4CBacxV95sOc%2FiN8f0Tr%2B9xvU&rqlang=cn&rsv_dl=tb&rsv_enter=0&rsv_sug3=6&rsv_btype=i&inputT=182&rsv_sug4=182
Process finished with exit code 0
1.5 關(guān)閉程序
在Selenium中,quit 方法用來退出驅(qū)動程序(Driver)并關(guān)閉執(zhí)行的瀏覽器;而close方法用來關(guān)閉執(zhí)行的瀏覽器,所以關(guān)閉程序建議使用quit方法。
1.6 加載測試地址
在UI自動化測試中,打開測試地址用到的方法是get方法,它的參數(shù)是要打開的測試頁面的地址。例如,要測試打開新浪郵箱的地址(https://mail.sina.com.cn/),測試代碼如下:
from selenium import webdriver
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('https://mail.sina.com.cn/')
driver.implicitly_wait(30)
driver.quit()
1.7 多窗口實戰(zhàn)
在新浪郵箱的登錄頁面(簡稱新浪登錄頁面,或登錄頁面)點擊“注冊”按鈕,如何在打開的注冊頁面輸入框中輸入注冊信息呢?這里會用到窗口處理的方法。current_window_handle用來獲取當(dāng)前瀏覽器的窗口句柄,window_handles用來獲取瀏覽器的所有窗口句柄。要實現(xiàn)在新浪登錄頁面點擊注冊,在注冊頁面郵箱地址輸入框中輸入郵箱地址,再次跳轉(zhuǎn)到登錄頁面,代碼如下:
from selenium import webdriver
import time
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('https://mail.sina.com.cn/')
driver.implicitly_wait(30)
#獲取當(dāng)前窗口句柄
now_handle=driver.current_window_handle
time.sleep(2)
print("當(dāng)前窗口句柄:",now_handle)
#點擊注冊鏈接
driver.find_element_by_link_text("注冊").click()
time.sleep(2)
#獲取所有窗口句柄
handles=driver.window_handles
print("所有窗口句柄:",handles)
for handle in handles:
#判斷hand不是當(dāng)前窗口句柄
if handle !=now_handle:
driver.switch_to.window(handle)
time.sleep(2)
driver.find_element_by_name("email").send_keys('hcc')#在mail注冊框框中輸入hcc
time.sleep(2)
#關(guān)閉注冊頁面
driver.close()
#切換到登錄頁面
driver.switch_to.window(now_handle)
time.sleep(3)
#在賬號輸入框輸入郵箱
driver.find_element_by_id('freename').send_keys('hcc')
time.sleep(4)
driver.quit()
D:\python3\python.exe C:/Users/Administrator/Desktop/testpy/baidu.py
當(dāng)前窗口句柄: 15
所有窗口句柄: ['15', '35']
Process finished with exit code 0
1.8 瀏覽器最大化
使瀏覽器最大化的方法是 maximize_window。一般打開瀏覽器時,界面并不是最大化的,這對 UI 自動化測試的影響比較大,所以建議在打開瀏覽器后,調(diào)用該方法讓瀏覽器最大化,實現(xiàn)的測試代碼如下:
driver.maximize_window()
1.9 刷新
刷新用到的方法是refresh方法。在UI自動化測試中,某些場景需要用到頁面的刷新。例如,打開百度首頁后,輸入搜索關(guān)鍵字,然后刷新頁面查看效果,實現(xiàn)的代碼如下:
from selenium import webdriver
import time
driver=webdriver.Firefox()
#瀏覽器最大化
driver.maximize_window()
driver.get('https://wwww.baidu.com/')
driver.implicitly_wait(30)
driver.find_element_by_id("kw").send_keys('selenium')
time.sleep(2)
#對頁面進行刷新
driver.refresh()
time.sleep(3)
driver.quit()
1.10 獲取執(zhí)行的瀏覽器
獲取執(zhí)行的瀏覽器名稱用到的是name方法,實現(xiàn)的代碼如下:
from selenium import webdriver
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('https://wwww.baidu.com/')
driver.implicitly_wait(30)
print('測試執(zhí)行的瀏覽器為:{0}'.format(driver.name))
driver.quit()
D:\python3\python.exe C:/Users/Administrator/Desktop/testpy/baidu.py
測試執(zhí)行的瀏覽器為:firefox
Process finished with exit code 0
-
WebElement類的方法
WebElement 類中有很多方法可以應(yīng)用在UI 自動化測試中。例如,get_attribute方法用以獲取輸入框中的Value值,is_enabled方法用來判斷文本是否可編輯。下面具體介紹這些方法在UI自動化測試中的應(yīng)用。
2.1 清空
在Selenium 中,實現(xiàn)清空用到的方法是 clear。例如,在百度搜索輸入框中輸入搜索關(guān)鍵字 Selenium,然后再調(diào)用 clear 方法清空輸入的關(guān)鍵字
2.2 獲取元素屬性值
get_attribute 方法可用來獲取元素屬性的值。在測試中,經(jīng)常需要獲取輸入框中的值,或者獲取輸入框中的提示信息,仍以新浪郵箱的登錄頁頁為例,實現(xiàn)的代碼如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<center>
<div>
<p>
用戶名: <input type="text" name="username" placeholder="請輸入用戶名">
</p>
<p>
密碼: <input type="password" placeholder="請輸入密碼" >
</p>
</div>
</center>
</body>
</html>
實際顯示:

接下來測試用戶名輸入框是否顯示“請輸入用戶名”的提示信息?!罢堓斎胗脩裘钡脑貙傩允莗laceholder,實現(xiàn)的代碼如下:
from selenium import webdriver
import time
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('file:///E:/test01/attribute.html')
name=driver.find_element_by_name("username")
print('用戶名輸入框中提示信息為:{0}'.format(name.get_attribute('placeholder')))
time.sleep(2)
driver.quit()
E:\test01\venv\Scripts\python.exe E:/test01/sel.py
用戶名輸入框中提示信息為:請輸入用戶名
在輸入框中輸入的值一般都在Value屬性中,例如,在百度搜索輸入框中輸入的搜索關(guān)鍵字存放在百度搜索 input的Value屬性中。要想獲取該關(guān)鍵字,實現(xiàn)的代碼如下:
from selenium import webdriver
import time
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('https://www.baidu.com/')
so=driver.find_element_by_id("kw")
so.send_keys('selenium webdriver')
print('百度搜索輸入框中填寫的關(guān)鍵字為:{0}'.format(so.get_attribute('value')))
time.sleep(2)
driver.quit()
E:\test01\venv\Scripts\python.exe E:/test01/sel.py
百度搜索輸入框中填寫的關(guān)鍵字為:selenium webdriver
2.3 檢查元素是否可見
is_displayed 方法用于測試該屬性對用戶是否可見,返回結(jié)果為布爾類型。如果可見,返回的結(jié)果為 True;如果不可見,返回的結(jié)果為 False。這里以百度首頁為例,測試“關(guān)于百度”是否可見,實現(xiàn)的測試代碼如下:
from selenium import webdriver
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('https://wwww.baidu.com/')
about=driver.find_element_by_link_text('關(guān)于百度')
print('關(guān)于百度是否可見:{0}'.format(about.is_displayed()))
driver.quit()
注解:由于“關(guān)于百度”在頁面上是可見的,那么運行代碼后返回的結(jié)果應(yīng)該是True,如圖所示。
D:\python3\python.exe C:/Users/Administrator/Desktop/testpy/baidu.py
關(guān)于百度是否可見:True
Process finished with exit code 0
2.4 檢查元素是否可編輯
is_enabled 方法用于測試文本是否可編輯,返回的結(jié)果是布爾類型。如果可編輯,返回的結(jié)果是 True;如果不可編輯,返回的結(jié)果是 False。以百度搜索輸入框為例,因為它是可編輯的,所以返回的結(jié)果是 True,實現(xiàn)的測試代碼如下:
from selenium import webdriver
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('https://wwww.baidu.com/')
so=driver.find_element_by_id('kw')
print('搜素輸入框是否可編輯:{0}'.format(so.is_enabled()))
driver.quit()
D:\python3\python.exe C:/Users/Administrator/Desktop/testpy/baidu.py
搜素輸入框是否可編輯:True
2.5 是否已選中
is_selected 方法主要針對單選按鈕或者復(fù)選按鈕,判斷它們是否已被選中,返回結(jié)果是布爾類型。如果選中,返回的結(jié)果是True;如果未選中,返回的結(jié)果是 False。這里以新浪郵箱的登錄為例,驗證登錄頁面是否默認選中了自動登錄,實現(xiàn)的代碼如下:
from selenium import webdriver
import time
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('https://mail.sina.com.cn/')
autoLogin=driver.find_element_by_id('store1')
print('新浪登錄頁面自動登錄是否已默認選中:{0}'.format(autoLogin.is_selected()))
driver.quit()
注解:新浪登錄頁面的自動登錄已默認選中,所以運行以上代碼成功后,會返回True
D:\python3\python.exe C:/Users/Administrator/Desktop/testpy/baidu.py
新浪登錄頁面自動登錄是否已默認選中:True
2.6 提交表單
提交表單用到的方法是submit。例如,在輸入框中輸入“昵稱”,點擊“提交”按鈕,跳轉(zhuǎn)到另外一個頁面,F(xiàn)orm表單的HTML代碼如下:
form.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<center>
<form action="index.html" method="get">
<p>
昵稱: <input type="text" name="username">
</p>
<p>
<input type="submit" name="form" value="提交">
</p>
</form>
</center>
</body>
</html>
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<center>
<h1>
hello hcc!
</h1>
</center>
</body>
</html>
實現(xiàn)以上交互的代碼如下:
from selenium import webdriver
import time
driver=webdriver.Firefox()
driver.maximize_window()
driver.get('file:///C:/Users/Administrator/Desktop/testpy/form.html')
driver.find_element_by_name('username').send_keys('hcc')
time.sleep(2)
driver.find_element_by_name('form').submit()
time.sleep(2)
driver.quit()
未完待續(xù)。。。第三節(jié)...NEXT