1.切換窗口
適用場(chǎng)景:點(diǎn)擊按鈕后,重新打開(kāi)一個(gè)窗口,想要在新的窗口定位操作,就需要切換窗口
原理:獲取窗口的唯一標(biāo)識(shí)就是句柄,獲取到句柄,就可以切換到對(duì)應(yīng)的窗口了
處理方法:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-593888.html
- 獲取到當(dāng)前的窗口柄(driver.current_window_handle)
- 獲取到所有的窗柄 (driver.window_handles)
- 判斷是否是想要操作的窗口,如果是,就可以對(duì)窗口進(jìn)行操作,如果不是跳轉(zhuǎn)到另外一個(gè)窗口,對(duì)另一個(gè)窗口進(jìn)行操作(driver.switch_to.window)
示例(百度搜索頁(yè)和百度新聞頁(yè)):
class TestDemo():
def setup(self):
self.driver = webdriver.Chrome()
self.driver.maximize_window()
self.driver.implicitly_wait(3)
def test_baidu(self):
self.driver.get("https://www.baidu.com/")
search_window = self.driver.current_window_handle
self.driver.find_element_by_xpath("http://*[@id='s-top-left']/a[1]").click()
handles = self.driver.window_handles
print(handles)
for handle in handles:
if handle != search_window:
self.driver.switch_to.window(handle)
print(self.driver.title)
self.driver.find_element_by_id('ww').send_keys('autotest')
self.driver.find_element_by_id('s_btn_wr').click()
2.處理frame
什么是frame?
frame是html中的框架,在html中,frame可以在同一個(gè)窗口中顯示不止一個(gè)頁(yè)面。
Frame分類(lèi)
frame標(biāo)簽包含frameset、frame、iframe三種
frameset和普通的標(biāo)簽一樣,不會(huì)影響正常的定位,可以使用index、id、name、webelement任意種方式定位frameset
而frame與iframe對(duì)selenium定位而言是一樣的。selenium有一組方法對(duì)frame進(jìn)行操作
注意:一個(gè)頁(yè)面中可能存在多個(gè)frame;一個(gè)frame中可能嵌套frame
處理方法:
- 跳轉(zhuǎn)到frame:switch_to.frame(frame_reference) --frame_reference用于定位frame,可以是id,name,index,也可以是selenium獲得WebElement對(duì)象。
- 嵌套frame先進(jìn)入父類(lèi)frame再進(jìn)入子frame,才可以對(duì)子frame中的元素處理
driver.switch_to.frame('id') #id
driver.switch_to.frame('name') #name
driver.switch_to.frame('0') #index
driver.switch_to.frame(driver.find_element_by_xpath('path'))#也可以用css等定位方式
- 跳轉(zhuǎn)出frame :switch_to.default_content()
- 切換到父級(jí)frame :switch_to.parent_frame()?
示例(qq郵箱登錄頁(yè)面):文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-593888.html
def test_frame(self):
self.driver.get("https://mail.qq.com/")
self.driver.switch_to.frame(self.driver.find_element_by_xpath('//*[@id="QQMailSdkTool_login_loginBox_qq"]/iframe'))#切換到父類(lèi)frame
self.driver.switch_to.frame('ptlogin_iframe')#切換到frame
time.sleep(3)
self.driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()
self.driver.switch_to.default_content()#跳出frame
self.driver.find_element_by_class_name('header_logo').click()
到了這里,關(guān)于selenium-多窗口和frame處理的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!