Selenium自动化特殊场景处理

2.5 Selenium自动化特殊场景处理

2.5.1 切换iframe

在自动化中如果不切换iframe,会定位不到元素。
示例:
在这里插入图片描述
在这里插入图片描述

场景:我们要上传图片,修改自己的头像信息,我们定位到这个input标签了,但是执行代码的时候会提示no such element
在这里插入图片描述

是因为这里有个iframe标签,没有切入到这个iframe就定位不到这个元素。
我们看一下Selenium进入iframe和退出iframe的方法吧!
进入iframe:
driver=webdriver.Chrome()
ele= driver.find_element_by_xpath
driver.switch_to.frame(ele)
退出iframe:
driver.switch_to.default_content()
这里要注意的只有一点,就是进入iframe是一层一层的进, 退出就是退到最外层。

2.5.2 浏览器多窗口处理

浏览器的多窗口就是指多个浏览器窗口,并且是从同一个浏览器进程中打开的多个窗口,对于这种场景,只能切换浏览器窗口,否则会定位不到元素。
场景:
在这里插入图片描述

处理方法:

driver=webdriver.Chrome()
#获取浏览器的句柄,如果有两个窗口就会以列表的方式存放句柄
handles=self.driver.window_handles
#handles的值(如果有两个窗口)
#['CDwindowA98D9D7B1619891BC09F2371409053F2','CDwindowE9C615316E388A6108755D7972E79B3A'] 
handles= driver.window_handles 
#关闭当前窗口
driver.close()
#切换到新窗口
driver.switch_to.window(handles[1])

这样就完成了窗口的切换。

2.5.3 鼠标键盘操作

在Selenium的使用中,有时候会需要用到一些鼠标、键盘类的用户操作场景。比如说:快捷键的测试、鼠标右键、悬停的测试等等,下面我们来看一下怎么进行键盘和鼠标的操作。

2.5.3.1 键盘操作

在Selenium中键盘的操作需要使用Keys库,这个库里面定义了许多预定义的键盘按钮。
比如说:Keys.TAB tab键,Keys.Enter回车键。
我们可以使用dir(Keys)命令列出全部元素,使用Keys.名称就可以啦!
在这里插入图片描述

2.5.3.2 鼠标操作

在Selenium中鼠标操作需要使用ActionChains库。
在处理鼠标操作呢,我们要建立一个ActionChains的对象,他需要的参数是webdriver的对象,在通过action调用ActionChains里面的方法完成鼠标的操作。

```python
driver=webdriver.Chrome
ele= driver.find_element_by_xpath(‘xpath表达式’)
action=ActionChains(driver)  
#我们来看下ActionChains里面的方法:
#左键点击ele元素
action.click(ele).perform()
#右键点击ele元素
action.context_click(ele).perform()
#双击
action.double_click(ele).perform()
#拖放到指定坐标位置
action.drag_and_drop_by_offset(ele,10,10).perform
#拖放到目标元素位置
action.drag_and_drop(ele,target). perform
#鼠标在指定坐标悬停
action.move_by_offset(10,10).perform
#鼠标在指定元素悬停
action.move_to_element(ele).perform()

2.5.4 上传文件

上传文件有两种方式,第一种上传文件是input标签呢,type属性是file。直接sendkeys就行,比如这种,直接定位元素然后上传
在这里插入图片描述

第二种上传文件非input,这个时候要使用PyUserInput模块,具体参考下面的博客:
https://blog.csdn.net/zyooooxie/article/details/88141601

2.5.5 执行JavaScript脚本

在自动化测试过程中,总会有一个特殊场景,是需要进行一些非常规操作的,比如执行JavaScript脚本,通过js脚本操作web页面。

driver=webdriver.Chrome()
driver.execute_script(‘js脚本’)

2.5.6 截屏

在进行自动化测试时,截屏操作还是很有必要的,比如说后面要说的验证码破解,以及二次封装时记录出现问题时的截图等等。
#driver浏览器对象,将整个页面截图
driver.get_screenshot_as_png()
#ele元素,将对应元素的位置截图,保存为…/lib/verify/verify.png
ele.screenshot(’…/lib/verify/verify.png’)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷雨飞鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值