微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

day10-selenium其他场景处理

frame

在web应用中经常会出现frame的嵌套应用,假设页面上有A,B两个frame,B在A内,具体思路

  • 使用switch_to.frame()方法,把当前定位的主体切换到B frame里

  • 使用switch_to.default_content()从B frame切换回A frame

driver.switch_to.frame()   # 切换到frame内操作 括号内写定位器 定位frame语句 find_element
driver.switch_to.default_content()  # 切换回认主体内操作

使用frame登录QQ邮箱

from selenium import webdriver
​
​
driver = webdriver.Chrome(r'D:\Program Files (x86)\Chromedriver\chromedriver_win32\chromedriver.exe')
​
driver.get('https://mail.qq.com/')
driver.maximize_window()    # 最大化窗口
driver.switch_to.frame(driver.find_element('id', 'login_frame'))    # 切换到frame
driver.find_element('id', 'u').send_keys('')  # 定位并输入账号
driver.find_element('id', 'p').send_keys('')   # 定位并输入密码
driver.find_element('id', 'login_button').click()   # 定位登录按钮并点击
​

文件上传

driver.find_element('type', 'file').send_keys('文件绝对路径')

上传文件可以直接定位到上传文件的input元素,使用send_keys发送本地文件绝对路径

这个方法只有在上传文件功能使用html自带的input type='file'时才有效。有的网站上传文件功能是使用另外封装的方法,这时send_keys就无效了

多窗口切换

有时自动化操作会在多个窗口来回操作,webdriver提供了很好的解决方案,使用driver.switch_to().window(handle)来切换窗口

from selenium import webdriver
import time
​
driver = webdriver.Chrome(r'D:\Program Files (x86)\Chromedriver\chromedriver_win32\chromedriver.exe')
​
driver.get('https://www.baidu.com/')
driver.maximize_window()
current_handle = driver.current_window_handle   # 记录主页面的handle
driver.find_element('class name', 'title-content').click()  # 点击链接
driver.switch_to.window(driver.window_handles[1])   # 切换到新的窗口
time.sleep(2)
driver.switch_to.window(current_handle)     # 切换回主窗口
driver.find_element('id', 'kw').send_keys('python')

悬浮菜单

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains    # 操作链
​
driver = webdriver.Chrome(r'D:\Program Files (x86)\Chromedriver\chromedriver_win32\chromedriver.exe')
​
driver.get('https://www.baidu.com/')
​
ActionChains(driver).move_to_element(driver.find_element('id', 's-usersetting-top')).perform()  # 将鼠标移动到指定元素上
driver.find_element('link text', '高级搜索').click()

验证码的处理

  • 自动化测试在某些场景需要填写验证码,增强了安全性,但是对测试人员来说,都是一个棘手的问题

  • 目前最快解决的聊个手段:

    • 去掉验证码:比较适合于新开发但未上线的系统

    • 设置万能码:比较适合于已经上线使用的系统。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐