一、下拉框(select類實現的)
在UI的自動化測試實戰中,如果遇到下拉框的選擇,我們可以使用Select類里面的方法來具體進行定位和解決。下面我們使用HTML的代碼來寫一個下拉框的頁面交互,讓大家從直觀上知道下拉框的交互:
如上是HTML的源代碼,下面具體看看交互的信息,如下所示:
二、下拉框實戰
1.select_by_index 索引的方式
select_by_index()的方法是通過索引的方式,如我們在上面的交互中,我們想選擇下拉框中的Go語言,它是在第三位,那么它的索引就是2,因為索引是從0開始,下面的代碼案例主要是以索引的方式來進行定位的,具體案例實戰代碼如下:
from selenium import webdriver from selenium.webdriver.support.select import Select import time as t driver=webdriver.Chrome() driver.maximize_window() driver.get('file:///Applications/code/testdev/UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/index.html') t.sleep(2) nr=driver.find_element_by_id('nr') #針對Select進行實例化
select=Select(webelement=nr) #索引方式
select.select_by_index(2) t.sleep(3) driver.quit()
2.select_by_value
select_by_value()方法是通過value的方式來進行定位,也就是標簽中option里面的value屬性來進行定位,比如我們還是Go語言,那么它的value的值就是“Go”,實戰代碼如下:
from selenium import webdriver from selenium.webdriver.support.select import Select import time as t driver=webdriver.Chrome() driver.maximize_window() driver.get('file:///Applications/code/testdev/UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/index.html') t.sleep(2) nr=driver.find_element_by_id('nr') #針對Select進行實例化
select=Select(webelement=nr) #value的方式
select.select_by_value('Go') t.sleep(3) driver.quit()
3.select_by_visible_text
select_by_text()的方法是通過文本信息來定位的,比如下拉框還是想選擇Go,那么它的文本信息其實就
是“Go語言”,見這部分的案例實戰代碼:
from selenium import webdriver from selenium.webdriver.support.select import Select import time as t driver=webdriver.Chrome() driver.maximize_window() driver.get('file:///Applications/code/testdev/UI%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/index.html') t.sleep(2) nr=driver.find_element_by_id('nr') #針對Select進行實例化
select=Select(webelement=nr) #文本的方式
select.select_by_visible_text('Go語言') t.sleep(3) driver.quit()
4.拉勾網下拉框實戰
但是拉勾網比較特殊,比如我們想在拉勾網搜索測試開發工程師,並點擊學歷要求的下拉框,選擇本科,但我們發現,它的源代碼中本大專本科等這些並沒有寫在select中,這時我們可以使用xpath來進行定位,具體實現的代碼如下:
driver=webdriver.Chrome() driver.maximize_window() driver.get('https://www.lagou.com/') t.sleep(3) driver.find_element_by_id('search_input').send_keys('測試開發工程師') t.sleep(3) #點擊搜索按鈕
driver.find_element_by_id('search_button').click() t.sleep(3) #點擊學歷要求
driver.find_element_by_xpath('//*[@id="jobsContainer"]/div[2]/div[1]/div[1]/div[2]/div/ul/li[2]/div/span').click() t.sleep(3) #選擇本科
driver.find_element_by_xpath('//*[@id="jobsContainer"]/div[2]/div[1]/div[1]/div[2]/div/ul/li[2]/div/div/ul[2]/li[2]/span').click() t.sleep(3) driver.quit()
三、多窗口實戰
實現從當前頁面切換到另外一個新的頁面,那么這個時候就需要使用到多窗口的操作和實戰。其實坦白說,多窗口更多值的是兩個窗口,如果是2個以上的窗口,是很難判斷的,因為缺少判斷的基准.
多窗口的解決步驟可以具體的描述為:
- 先獲取當前窗口句柄
- 然后點擊鏈接,打開一個新的窗口句柄
- 然后獲取到所有的窗口句柄
- 循環所有的窗口句柄,判斷如果不是當前窗口句柄,那么就切換到新的窗口句柄(如果當前的,就只能是新的窗口了)
- 切換到新的窗口后,進行操作完成后,然后關閉新的窗口,再切換到當前窗口句柄
比如我們在百度首頁,又打開了hao123頁面,這時我們打開了兩個窗口,我們想要對他們分別進行操作,用如下代碼實現:
from selenium import webdriver import time as t driver=webdriver.Chrome() #首先打開百度
driver.get('http://www.baidu.com/') #獲取當前窗口(百度)
nowHandle=driver.current_window_handle t.sleep(3) #打開hao123的窗口
driver.find_element_by_partial_link_text('hao').click() t.sleep(3) #獲取所有的窗口 (百度和hao123)
allHandles=driver.window_handles t.sleep(3) for item in allHandles: #循環所有的窗口,我們把它賦item if item!=nowHandle: #如果item不是百度的頁面,就是hao123
driver.switch_to.window(item) #切換到hao123
t.sleep(3) driver.find_element_by_xpath('//*[@id="search"]/form/div[2]/input').send_keys('hao123') t.sleep(3) driver.close() driver.switch_to.window(nowHandle) #切換到百度頁面
t.sleep(3) driver.find_element_by_id('kw').send_keys('百度') t.sleep(3) driver.quit()
四、webdriver瀏覽器屬性
在WebDriver的測試框架中,WebDriver的類里面提供了很多的方法來專門針對瀏覽器的操作,這些方法都是在WebDriver的類里面,如測試被測試的瀏覽器地址,獲取被測試的瀏覽器名稱。下面針對這部分結合具體的案例實戰來說明這些的案例應用實戰。
1.獲取測試的地址
from selenium import webdriver driver=webdriver.Chrome() '''獲取測試的地址''' driver.get('http://www.baidu.com') driver.find_element_by_partial_link_text('hao').click() #斷言
assert driver.current_url.endswith('hao123.com/')==True #斷言測試的地址是不是以'hao123.com/'結尾如果是返回True 如果不是返回False
driver.close()
2.獲取當前頁面代碼
from selenium import webdriver driver=webdriver.Chrome() driver.get('http://www.baidu.com') print('獲取網頁的源代碼: ',driver.page_source) driver.quit()
3.獲取當前的Title
獲取瀏覽器的title其實很簡單的,比如百度的title它就是“百度一下,你就知道”,那么下面針對這部分進行具體的驗證
from selenium import webdriver driver=webdriver.Chrome()
driver.maximize_window() driver.get('http://www.baidu.com') assert driver.title=='百度一下,你就知道' driver.close()
4.前進和后退
from selenium import webdriver driver=webdriver.Chrome()
driver.maximize_window() '''前進和后退'''
import time as t driver=webdriver.Chrome() driver.get('http://www.baidu.com') t.sleep(3) driver.get('http://www.bing.com') t.sleep(3)
#后退 driver.back() print('地址為:',driver.current_url) t.sleep(3)
#前進 driver.forward() print('地址為:',driver.current_url) t.sleep(3)
5.刷新頁面
from selenium import webdriver import time as t driver=webdriver.Chrome() driver.find_element_by_id('sb_form_q').send_keys('python') t.sleep(3) driver.refresh() t.sleep(3) driver.close()
五、類的方法實戰
在UI自動化測試中,WebElement的類里面提供了很多的方法可以進行調用,比如進行具體的清空的操作,和
獲取一個文本輸入框里面輸入的關鍵字的信息。下面詳細的演示下這部分的具體應用和案例實戰。
1.clear()清空
from selenium import webdriver import time as t driver=webdriver.Chrome() driver.maximize_window() driver.get('http://www.baidu.com') so=driver.find_element_by_id('kw') so.send_keys('asdfgh') t.sleep(3) #清空文本框內輸入的信息 so.clear() t.sleep(3) driver.quit()
2.get_attribute():獲取元素屬性的值
from selenium import webdriver import time as t driver=webdriver.Chrome() driver.maximize_window() driver.get('http://www.lagou.com') t.sleep(3) driver.find_element_by_link_text('登錄').click() t.sleep(3) login=driver.find_element_by_xpath('/html/body/div[3]/div[1]/div/div/div[2]/div[3]/div[1]/div/div[2]/form/div[1]/div/input') print(login.get_attribute('placeholder')) t.sleep(3) driver.quit()
3.所有的input里面輸入的值,都是在value的屬性
from selenium import webdriver import time as t driver=webdriver.Chrome() driver.maximize_window() driver.get('https://www.baidu.com/') so=driver.find_element_by_id('kw') so.send_keys('admin') print(so.get_attribute('value')) driver.quit()
4.is_displayed()是否可見
from selenium import webdriver import time as t driver=webdriver.Chrome() driver.maximize_window() driver.get('https://www.baidu.com/') aboutBaidu=driver.find_element_by_link_text('關於百度') print(aboutBaidu.is_displayed()) driver.quit()
5.is_enabled():是否可編輯
from selenium import webdriver import time as t driver=webdriver.Chrome() driver.maximize_window() driver.get('https://www.baidu.com/') so=driver.find_element_by_id('kw') #is_enabled():是否可編輯
print(so.is_enabled()) driver.quit()
6.is_selected()針對單選按鈕是否勾選
from selenium import webdriver import time as t driver=webdriver.Chrome() driver.maximize_window() driver.get('https://mail.sina.com.cn/#') autoLogin=driver.find_element_by_id('store1') t.sleep(3) print('是否勾選:',autoLogin.is_selected())#默認勾選,所以為真
t.sleep(3) autoLogin.click() #取消勾選自動登錄
t.sleep(3) print('是否勾選:',autoLogin.is_selected()) driver.quit()