网页frame与多窗口,多浏览器,上传弹框处理

Selenium处理多窗口场景

多个窗口识别与切换

点击某些链接,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口。获取窗口的唯一标识用句柄表示,所以只需要切换句柄,就可以i在多个页面之间灵活操作。
处理流程:
1.先获取当前窗口的句柄

driver.current_window_handle

2.再获取所有窗口句柄

driver.window_handles

3.判断是否为想要操作的窗口,如果是,就可以对窗口进行操作,如果不是,跳转到另外一个窗口,对另一个窗口进行操作

driver.switch_to_window

Selenium处理frame

多个frame识别与切换

在做web自动化的时候,如果一个元素定位不到,很可能是因为该元素在iframe中
frame是HTML中的框架,在HTML中所谓的框架就是可以在同一个浏览器中显式不止一个页面
基于HTML的框架,又可分为垂直框架和水平框架(cols,rows)

frame分类

frame标签包含frameset、frame、iframe三种
frameset和普通的标签一样,不会影响正常的定位,可以使用index、id、name、webelement任意种方式定位frame
frame与iframe对selenium定位来说是一样的,selenium有一组方法对frame进行操作:

driver.switch_to.frame() # 根据元素id或者index切换frame
driver.switch_to.default_content() # 切换到默认frame
driver.switch_to.parent_frame() # 切换到父级frame
未嵌套的iframe
driver.switch_to_frame("frame的id")
driver.switch_to_frame("frame-index") # frame无id的时候可以根据索引来处理,索引从0开始,如:driver.switch_to_frame(0)
嵌套的iframe

这个时候先进入到iframe的父节点,再进入到子节点,然后进行操作

driver.switch_to.frame("父节点")
driver.switch_to.frame("子节点")

多浏览器处理

通过传递不同的参数来处理不同的浏览器,比如把浏览器类型当作一个参数传到os.getenv方法中,然后根据传过来的参数进行判断选择不同的浏览器

def setup(self):
	browser = os.getenv("browser")
	if browser == 'firefox':
		self.driver = webdriver.Firefox()
	elif browser == 'chrome'
		self.driver = webdriver.Chrome()

文件上传处理

input标签

可以直接使用send_keys(文件地址)上传文件:

el = driver.find_element_by_id("上传按钮id")
el.send_keys("文件路径+文件名")

弹框处理机制

在页面操作时会遇到一些JavaScript生成的alert,confirm,prompt弹框,这个时候可以用switch_to.alert()方法定位到。然后用text/accept/dismiss/send_keys等方法进行操作。

switch_to.alert() # 获取当前页面上的警告框
text() # 返回alert/confirm/prompt中的文字信息
accept() # 接受现有警告框
dissmiss() # 解散现有警告框
send_keys(keysToSend) # 发送文本至警告框,keysToSend:将文本发送至警告框

识别弹框是JavaScript生成的alert还是个div组件的最简单粗暴的方法:alert无法在浏览器的开发者工具中定位到

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值