1.执行脚本
如果你定位的元素通过各种方法都无法完成页面操作,最后的方法就是通过操作js脚本来完成 。
在selenium中提供了一个方法 ,这个可以方法可以自行JS的脚本 。具体为:
execute_script(js脚本) : js脚本代表要执行的脚本
# 示例
js = "console log('hello world')" # 打印hello world
driver.execute_script(js)
具体案例:
driver.find_element_by_id('kw').send_keys('selenium')
driver.find_element_by_id('su').click()
sleep(3)
js = 'window.scrollTo(0, document.body.scrollHeight)' # 滚动到底部
driver.execute_script(js) # 执行js脚本
sleep(3)
js = 'window.scrollTo(0, document.body.scrollTop=0)' # 滚动到顶部
driver.execute_script(js) # 执行js脚本
2.截图
编写好的自动化脚本有时候会运行错误 ,但是打印的信息又不足以排查出错误 ,故希望能在执行出错的时候对当前窗口截图保存 ,通过保存图片就可以非常直观的看出错误的原因 。
在selenium中提供了一个截图的方法 ,具体为:
driver.get_screenshot_as_file(img_path) img_path : 图片保存路径
# 需要注意的是,它的保存格式为.png , 其它格式会报错。
具体案例 :
-
访问项目,
-
输入错误密码后
-
点击登录
# 保存头
"""
driver.get_screenshot_as_file(img_path) img_path : 保存图片的路径加文件名 ,保存的是png格式 。
"""
# 定位tpshop登录
from selenium import webdriver
import time
# 1. 创建浏览器对象
driver = webdriver.Chrome()
driver.maximize_window()
# 2. 输入地址 :http://localhost
driver.get("http://localhost")
# 3. 定位元素
# 1) 点击登录
driver.find_element_by_link_text("登录").click()
time.sleep(3)
# 2) 输入用户名
driver.find_element_by_id("username").send_keys("13988888888")
# 3) 输入密码
driver.find_element_by_name("password").send_keys("1234567")
# 4) 输入验证码
driver.find_element_by_name("verify_code").send_keys("8888")
time.sleep(1)
# 5) 点击登录
driver.find_element_by_class_name("J-login-submit").click()
time.sleep(3)
driver.get_screenshot_as_file('login_error.jpg') # 保存截图
time.sleep(5)
driver.quit()
3.验证码
只要你做web测试,肯定绕不过验证码这一关 ,因为系统设计验证码的初衷就是为了防自动化软件登录 。所以 ,在进行web自动化时 ,验证码的解决也必须是要考虑的 ,目前可行的方案有以下几种 :
解决方案 | 说明 | 推荐度 |
---|---|---|
去掉验证码 | 去掉验证码,虽说解决测试的问题,但是它容易给开发造成问题,比如不小心把没有验证码的代码上传到用户环境上 。 | 一般 |
设置后门 | 验证码保持正常变化,但是让开发做个通行证码,只要输入这个码就能验证通过,而这个码也只有测试人员知道,即便不小心上线,别人也不知道。 | 推荐 |
验证码识别 | 通过python-tesseract来识别图片类型的验证码,但是识别率不够稳定 ,而且有些系统验证码特别难 ,靠识别不能保证自动化的稳定性 。 | 不推荐 |
记录cookie | 通过记录cookie进行跳过登录 。通过会话跟踪, 记录用户登录状态,需要实现记住密码和自动登录功能的系统才可以 。 | 一般 |