一、Selenium入门
本期介绍如何处理警告弹窗,frame切换和滚动条的操作,顺便再说一下如何对页面进行截图,下面直接进入正题开始本期的内容。
1、警告弹窗的处理
有时我们在执行时会弹出一些系统的弹框,这是我们需要将其关闭,避免影响我们后面的测试。
方法 | 说明 |
---|---|
alert = driver.swtich_to.alert | 获取弹出框对象 |
alert.text | 获取弹出框的提示信息 |
alert.accept() | 接受弹出框 |
alert.dismiss() | 取消弹出框 |
实例代码演示
# 导包
from selenium import webdriver
import time
# 实例化浏览器驱动对象
driver = webdriver.Chrome()
# 打开百度
driver.get("https://www.baidu.com")
# 窗口最大化
driver.maximize_window()
# 隐式等待
driver.implicitly_wait(10)
#鼠标悬停至“设置”链接
driver.find_element_by_xpath('//span[text()="设置"]').click()
#打开搜索设置
driver.find_element_by_link_text("搜索设置").click()
# 点击 保存设置
driver.find_element_by_xpath('//a[text()="保存设置"]').click()
time.sleep(3)
# 弹出确认框,接受确认
driver.switch_to.alert.accept()
# 等待3秒
time.sleep(3)
# 关闭
driver.quit()
2、iframe表单切换
在web用应用中会遇到一些iframe的表单嵌套的内容一般为广告位,而webdriver只能对当前页面内的元素进行定位,所以就需要切换到对应的表单下进行操作
方法 | 说明 |
---|---|
driver.swtich_to.frame(“标签的元素对象”) | 切换到目标iframe |
driver.swtich_to.default_content() | 返回默认页面 |
实例代码演示
# 导包
from selenium import webdriver
import time
# 实例化浏览器驱动对象
driver = webdriver.Chrome()
# 打开163邮箱
driver.get("https://mail.163.com/")
# 窗口最大化
driver.maximize_window()
# 隐式等待
driver.implicitly_wait(10)
# 切换到登录的iframe中
fr = driver.find_element_by_css_selector('[scrolling="no"]')
driver.switch_to.frame(fr)
# 输入邮箱名称
driver.find_element_by_name('email').send_keys("ygc_king@163.com")
# 输入密码
driver.find_element_by_name('password').send_keys("111111")
# 退出到初始也页面
driver.switch_to.default_content()
# 点击企业邮箱
driver.find_element_by_xpath('//a[text()="企业邮箱"]').click()
# 等待3秒
time.sleep(3)
# 关闭
driver.quit()
说明一下,driver.swtich_to.frame()也可以用id和name属性的,我们看一下源码(如下图),默认是先进行id属性和name属性进行定位。这里我是先用定位好的,然后在切换的,原因是163邮箱的这个登录iframe的id属性值是变化的,每次打开id属性值都不一样,所以我没有用id属性进行定位,虽然用id和name比较方便,但是一定要保证id和name是唯一不变的。
3、滚动条的滑动
方法 | 说明 |
---|---|
js = “window.scrollTo(x,y)” | 定义js脚本字符串 |
driver.execute_script(js) | 执行js脚本 |
x表示横向移动像素,y表示纵向移动的像素,要移动到最右侧或者最低部只要设置参数为无穷大即可
实例代码演示
# 导包
from selenium import webdriver
import time
# 实例化浏览器驱动对象
driver = webdriver.Chrome()
# 打开百度搜索结果页
driver.get("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E4%BD%A0%E5%A5%BD")
# 窗口最大化
driver.maximize_window()
time.sleep(1)
# 隐式等待
driver.implicitly_wait(10)
# 定义js脚本字符串
js = "window.scrollTo(1000,10000)"
# 执行
driver.execute_script(js)
# 等待3秒
time.sleep(3)
# 关闭
driver.quit()
4、窗口截图
我们在跑自动化时,可以对报错页面继续截图,或断言失败的页面进行截图,这样方便我们后期进行查看和bug的提交,或分析自动化代码中的bug。
方法 | 说明 |
---|---|
driver.get_screenshot_as_file(filepath) | 截图 |
实例代码演示
# 导包
from selenium import webdriver
import time
# 实例化浏览器驱动对象
driver = webdriver.Chrome()
# 打开163邮箱
driver.get("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E4%BD%A0%E5%A5%BD")
# 窗口最大化
driver.maximize_window()
time.sleep(1)
# 隐式等待
driver.implicitly_wait(10)
# 定义js脚本字符串
js = "window.scrollTo(1000,10000)"
# 执行
driver.execute_script(js)
# 截图
file_name = "./test_screen%s.png" % time.strftime("%Y%m%d%H%M%S")
driver.get_screenshot_as_file(file_name)
# 等待3秒
time.sleep(3)
# 关闭
driver.quit()
说明:保存的路径必须提前手工创建好,我是直接保存到当前文件中,我们可以查看截图,结果如下
到目前为止Selenium的使用就介绍完了,里边基本包含了我们遇到的大部分情况。但是只有Selenium还不能很好的编写自动化代码,因为我们在写自动化的代码时会很多,会出现很多冗余的代码出现,也不好管理代码,一旦出现bug不好定位,而且只要UI有变化,我们代码的改动量也会很大,这里我们就要引出下一个要介绍的UnitTest框架,通过这个框架就能对我们的测试用例进行很好的管理,从下期开始就要对UnitTes测试框架进行介绍了!!