selenium处理多窗口场景
多个窗口识别
多个窗口之间切换
获取窗口的唯一标识用句柄表示,所以只需要切换句柄,就可以在多个窗口下切换
1,获取当前的窗口句柄 driver.current_window_handle
2,获取所有的窗口句柄 driver.window_handles
3,切换窗口 driver.switch_to_window 加索引值
from time import sleep
from selenium_webui.selenium_iframe_windows.base import Base
class TestWindows(Base):
def test_window(self):
self.driver.get('https://www.baidu.com/')
self.driver.find_element_by_link_text('登录').click()
# print(self.driver.current_window_handle)
# print(self.driver.window_handles)
self.driver.find_element_by_xpath('//*[@id="passport-login-pop-dialog"]/div/div/div/div[2]/a').click()
sleep(5)
windows = self.driver.window_handles # 获取所有的窗口句柄
self.driver.switch_to_window(windows[-1]) # 切换到最后一个窗口,-1
# self.driver.find_element(By.ID, '//*[@id="TANGRAM__PSP_4__userName"]').send_keys('username')
self.driver.find_element_by_id('TANGRAM__PSP_4__userName').send_keys('username')
sleep(3)
self.driver.switch_to_window(windows[0])
self.driver.find_element_by_id('TANGRAM__PSP_11__userName').send_keys('login_username')
self.driver.find_element_by_id('TANGRAM__PSP_11__password').send_keys('login_password')
self.driver.find_element_by_id('TANGRAM__PSP_11__submit').click()
sleep(3)
selenium处理frame
frame:frame是HTML中的框架,所谓的框架,就是在同一个浏览器中可以显示不止一个页面。
frame标签包含frameset,frame,iframe
frameset和普通标签一样,不会影响定位
frame存在:嵌套,未嵌套
切换frame:
driver.switch_to.frame() 根据元素id或者索引值切换
driver.switch_to.default_content() 切换到默认frame
driver.switch_to.parent_frame() 切换到父级frame
处理嵌套的frame,可以先进入到iframe的父节点,再进入到子节点,然后对子节点中的对象进行处理
多个frame识别
多个frame之间切换
class TestFrame(Base):
def test_frame(self):
self.driver.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
self.driver.switch_to.frame('iframeResult')
print(self.driver.find_element_by_id('draggable').text)
self.driver.switch_to.parent_frame()
# 打开父级页面
# self.driver.switch_to_default_content()
# 默认页面,也就是打开网页
print(self.driver.find_element_by_id('submitBTN').text)