二 對象的定位
2.1 定位單個元素
在自動化的測試中,對象元素的定位和操作是自動化的核心部分,但是對象是定位自動化的基礎,在對象的基礎上,纔可以形成對對象的操作。
webdriver提供了元素定位的方法,常見的有如下的幾種:
id
name
class name
tag name
link text
partial link text
xpath
css selector
分別對應pythonwebdriver的單個方法爲;
find_element_by_id()
find_element_by_name()
find_element_by_class_name()
find_element_by_tag_name()
find_element_by_link_text()
find_element_by_partial_link_text()
find_element_by_xpath()
find_element_by_css_selector()
已百度首頁的搜索輸入框爲案例,在搜索輸入框輸入 appium,來分別說明 python webdriver的元素的定位,見百度首頁搜索輸入框的源碼截圖:
<input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd"> |
id/name/classname/xpath/css selector 定位方法爲:
# 通過id定位
driver.find_element_by_id('kw').send_keys('appium')
# 通過name定位
driver.find_element_by_name('wd').send_keys('appium')
# 通過class name定位
driver.find_element_by_class_name('s_ipt').send_keys('appium')
# 通過xpath定位
driver.find_element_by_xpath(".//*[@id='kw']").send_keys('appium')
# 通過css selector定位
driver.find_element_by_css_selector('#kw').send_keys('appium')
link text/partiallink 的定位百度首頁“新聞”的方法爲:
# 通過link text定位
driver.find_element_by_link_text(u'新聞').click()
# 通過partial link text定位
driver.find_element_by_partial_link_text(u'聞').click()
2.2 定位一組元素
在瀏覽器特定的操作中,有時候需要定位一組對象,如下拉框的等,webdriver提供了定位一組元素的方法find_elements。
定位一組對象的方法與定位單個對象的方法雷同,見如下:
find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()
定位一組對象使用的場景一般爲:
1、批量操作
2、另外一種是選取一組對象,在這組對象中定位到具體的對象
2.3 瀏覽器的操作
瀏覽器最大化 |
Driver.maximize_window() |
設置瀏覽器的高,寬 |
Driver.set_window_size() |
控制瀏覽器前進 |
Driver.forward() |
控制瀏覽器後退 |
Driver.back() |
瀏覽器刷新 |
Driver.refersh() |
獲取瀏覽器的title |
Driver.title |
獲取當前網頁的url |
Driver.current_url |
獲取當前頁面的源碼 |
Driver.page_source |
獲取執行瀏覽器名稱 |
Driver.name |
如上的代碼示例見如下:
# coding:utf-8
from selenium import webdriver
from time import sleep
driver=webdriver.Firefox() # 如果選擇Python3.0 則需要添加驅動
# 設置瀏覽器高寬
driver.set_window_size(500,600)
# 瀏覽器最大化
driver.maximize_window()
driver.implicitly_wait(30)
# 訪問百度
driver.get('http://www.baidu.com')
# 刷新
driver.refresh()
# 訪問bing
driver.get('http://www.bing.com')
# 後退
driver.back()
# 前進
driver.forward()
# 獲取瀏覽器的title
print driver.title
# 獲取瀏覽器的URL
print driver.current_url
# 獲取瀏覽器當前頁的源碼
print driver.page_source
# 獲取當前執行的瀏覽器
print driver.name
driver.quit()
2.4 WebElement接口的常用方法
返回元素的尺寸 |
Driver.size() |
獲取元素的文本 |
Driver.text |
獲取屬性值 |
Driver.get_attribute() |
設置改元素是否可見 |
Driver.is_displayed |
複選框或單選框是否勾選 |
Driver.is_selected() |
存儲input編輯框是否編輯 |
Driver.is_enabled() |
清空操作 |
Driver.clear() |
點擊操作 |
Driver.click() |
輸入操作 |
Driver.send_keys() |
******************************如上的代碼示例如下:************************************************************************************
#coding:utf-8
from seleniumimport webdriver
from timeimport sleep
driver=webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('http://www.baidu.com')
login=driver.find_element_by_id('su')
# 獲取元素尺寸
print login.size
# 獲取屬性住
printlogin.get_attribute('type')
# 元素是否可見
print u'是否可見:',login.is_displayed()
# 元素是否可勾選
print u'是否可勾選:',login.is_selected()
# 元素是否可編輯
print u'是否可編輯:',login.is_enabled()
driver.quit()
2.5 百度登錄實例
已百度首頁的百度登錄,退出,來完整的進行演示元素的定位以及api部分的使用,見如下的代碼:
************************************代碼部分*****************************************************************************
# coding:utf-8
from seleniumimport webdriver
from timeimport sleep
driver=webdriver.Firefox()
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('http://www.baidu.com')
# 點擊登錄按鈕
driver.find_element_by_link_text(u'登錄').click()
# 輸入賬號
driver.find_element_by_id('TANGRAM__PSP_8__userName').send_keys('baidu account')
# 輸入密碼
driver.find_element_by_id('TANGRAM__PSP_8__password').send_keys('account password')
# 取消自動登錄
driver.find_element_by_id('TANGRAM__PSP_8__memberPass').click()
# 點擊登錄按鈕
driver.find_element_by_id('TANGRAM__PSP_8__submit').click()
# 獲取暱稱
niCheng=driver.find_element_by_xpath(".//*[@id='s_username_top']/span")
text=niCheng.text
niCheng.click()
# 點擊退出按鈕
driver.find_element_by_xpath(".//*[@id='s_user_name_menu']/div/a[5]").click()
# 點擊確定按鈕
driver.find_element_by_xpath(".//*[@id='tip_con_wrap']/div[3]/a[3]").click()
sleep(2)
assert text in u'學習無涯'
driver.quit()