點(diǎn)此獲取更多相關(guān)資料
本文為霍格沃茲測試開發(fā)學(xué)社學(xué)員學(xué)習(xí)筆記分享
原文鏈接:https://ceshiren.com/t/topic/27048
一、多窗口處理.
1.1、多窗口簡介
點(diǎn)擊某些鏈接,會(huì)重新打開?個(gè)窗?,對于這種情況,想在新頁?上操作,就
得先切換窗?了。
獲取窗?的唯?標(biāo)識?句柄表?,所以只需要切換句柄,就可以在多個(gè)頁?靈
活操作了
1.2、多窗口處理流程
- 先獲取當(dāng)前窗口的句柄driver.current_window_handle
- 再獲取所有的窗口句柄driver.windows_handles
- 然后判斷當(dāng)前窗口是否為需要操作的窗口,如果不是則,切換到下一個(gè)窗口,如果是,則在當(dāng)前窗口進(jìn)行操作
def test_switch_window(self):
"""窗口切換操作"""
# 1、打開百度
self.driver.get("https://www.baidu.com")
print(self.driver.title, self.driver.current_window_handle)
# 2、打開搜狗
self.driver.switch_to.new_window()
self.driver.get("https://www.sougou.com")
print(self.driver.title, self.driver.current_window_handle)
# 3、打開hao360
self.driver.switch_to.new_window()
self.driver.get("https://hao.360.com/")
print(self.driver.title, self.driver.current_window_handle)
# 4、打開測試人
self.driver.switch_to.new_window()
self.driver.get("https://ceshiren.com")
print(self.driver.title, self.driver.current_window_handle)
handles = self.driver.window_handles
print(handles)
self.driver.switch_to.window(handles[0])
self.driver.switch_to.window(handles[-1])
print(self.driver.title)
二、多網(wǎng)頁frame處理
2.1、frame簡介
在web自動(dòng)化中,如果一個(gè)元素始終無法定位,那么很有可能是frame中
- 什么是frame呢?
frame是html的框架,所謂框架就是可以在同一個(gè)頁面顯示不止一個(gè)區(qū)域,基于html框架,又可以分為垂直框架和水平框架(cols,rows)
-
frame分類
- frame標(biāo)簽分為frameset,ifame、frame三種
- frameset和普通的標(biāo)簽一樣,不會(huì)影響正常的元素定位,可以使用index、id、name、webelement等方式定位到frame
- frame、iframe相當(dāng)于selenium而言,則需要進(jìn)行一些特殊的操作后,才能到定位到元素
2.2、多frame切換
-
frame存在兩種文章來源:http://www.zghlxwxcb.cn/news/detail-689183.html
- 一種嵌套的
- 一種未嵌套的
-
切換frame文章來源地址http://www.zghlxwxcb.cn/news/detail-689183.html
- driver.swich_to.frame():根據(jù)元素id、index切換frame
- driver.switch_to.default_content():切換到默認(rèn)的frame
- deiver.switch_to.parent_frame():切換到父級frame
未嵌套的frame
- driver.switch_to.frame(‘frame的id’):有id時(shí)優(yōu)先使用id
- driver.switch_to.frame(‘frame-index’):沒有id的時(shí)間根據(jù)索引來處理,索引從0開始
嵌套的frame
- 對于嵌套的frame,則先進(jìn)入到frame的父節(jié)點(diǎn),再進(jìn)到子節(jié)點(diǎn),然后可以就可以子節(jié)點(diǎn)中的元素對象進(jìn)行操作了
- driver.switch_to.frame(“父節(jié)點(diǎn)”)
- driver.switch_to.frame(“子節(jié)點(diǎn)”)
def test_switch_frame(self):
# ? 打開包含frame的web頁? https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable
# ? 打印’請拖拽我’元素的?本
# ? 打印’點(diǎn)擊運(yùn)?’元素的?
self.driver.get("https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")
self.driver.switch_to.frame("iframeResult")
ele01 = self.driver.find_element(By.ID, "draggable")
print(ele01.text)
ele02 = self.driver.find_element(By.ID, "droppable")
print(ele02.text)
self.action.drag_and_drop(ele01, ele02).perform()
time.sleep(3)
self.driver.switch_to.alert.accept()
# self.driver.switch_to.default()
# self.driver.switch_to.parent_frame()
到了這里,關(guān)于軟件測試/測試開發(fā)丨Selenium 網(wǎng)頁frame與多窗口處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!