一、selenium元素操作
- element.send_keys(“内容”) # 输入方法
注:上传文件,使用 send_keys(“文件路径及文件名”)
如:driver.find_element_by_css_selector("[name=‘up’]").send_keys(“D:\hello123.txt”) - element.click() # 点击方法
- element.clear() # 清空
注:在输入方法之前一定要清空操作。
注:element表示为selenium元素,下同。
二、浏览器常用操作API
- 最大化浏览器:
driver.maximize_window() #一般为前置代码 - 设置浏览器大小 单位像素
driver.set_window_size(w, h) - 设置浏览器位置
driver.set_window_position(x, y) - 后退操作
driver.back() - 前进操作
driver.forward() - 刷新操作
driver.refresh() - 关闭当前主窗口(主窗口:默认启动哪个界面,就是主窗口)
driver.close() - 关闭由driver对象启动的所有窗口
driver.quit() - 获取当前页面title信息
driver.title - 获取当前页面url信息
drive.current_url
注:driver.title 和 driver.current_url 没有括号,应用场景:一般为判断上步操作是否执行成功。
三、浏览器元素信息操作API
- 获取元素文本
element.text - 获取元素大小
element.size - 获取元素属性值
element.get_attribute()
如:获取链接地址 driver.find_element_by_css_selector("[name=‘up’]").get_attribute(“href”) - 判断元素是否可见
element.is_displayed() - 判断元素是否可用
element.is_enabled() - 判断元素是否被选中
element.is_selected() - 返回元素的tagName
element.tag_name - 获取元素坐标
element.location
四、 鼠标操作
(一)、导包
包:from selenium.webdriver.common.action_chains import ActionChains
注:可通过ActionChains类—>快速导包
(二)、鼠标事件常用的操作方法
-
执行鼠标事件方法
perform() -
右击
context_click(element)
应用:context_click(element).perform()
注:selenium框架中虽然提供了右击鼠标方法,但是没有提供选择右击菜单方法,可以通过发送快捷键的方式解决(谷歌浏览器不支持)。 -
双击
double_click(element)
应用:double_click(element).perform() -
拖拽
drag_and_drop(element)
应用:drag_and_drop(source, target).perform() -
悬停
move_to_element(element)
应用: move_to_element(element).perform()
注:为方便后续使用,实例化ActionChains类时最好实名使用。
匿名:ActionChains(driver).context_click(element).perform()
实名:action = ActionChains(driver)
# 实例化并获取 ActionChains类
action = ActionChains(driver)
# 调用右击方法 类.方法名()
ActionChains(driver).context_click(username).perform()
五、键盘操作
(一)、导包
包:from selenium.webdriver.common.keys import Keys
注:可通过Key类—>快速导包
(二)、常用的快捷键
单键: element.send_keys(Keys.XXX)
element.send_keys(Keys.ENTER) # 按下回车键
element.send_keys(Keys.TAB) # 按下Tab制表键
element.send_keys(Keys.SPACE) # 按下空格键space
element.send_keys(Kyes.ESCAPE) # 按下回退键Esc
element.send_keys(Keys.BACK_SPACE) # 按下删除键BackSpace,一次删除一个字母或文字
element.send_keys(Keys.SHIFT) # 按下shift键
element.send_keys(Keys.CONTROL) # 按下Ctrl键
element.send_keys(Keys.ARROW_DOWN) # 按下鼠标光标向下按键
CONTROL:Ctrl键
组合键:element.send_keys(Keys.XXX, ‘a’)
element.send_keys(Keys.CONTROL,'a') # 组合键全选Ctrl+A
element.send_keys(Keys.CONTROL,'c') # 组合键复制Ctrl+C
element.send_keys(Keys.CONTROL,'x') # 组合键剪切Ctrl+X
element.send_keys(Keys.CONTROL,'v') # 组合键粘贴Ctrl+V
六、元素等待
(一)、什么是元素等待
元素在第一次未找到时,元素等待设置的时长被激活,如果在设置的有效时长内找到元素,继续执行代码,如果超出设置的时长未找到元素,抛出未找到元素异常。
(二)、元素等待分类
- 隐式等待
- 显式等待
(三)、隐式等待
-
方法:
driver.implicitly_wait(30)
一般情况下设置30秒 -
特点:
- 针对所有元素生效。
- 一般情况下为前置必写代码。
注:
前置代码一般有:
1.获取浏览器驱动对象;
2. 最大化浏览器;
3. 设置隐式等待
(四)、显示等待
-
导包: from selenium.webdriver.support.wait import WebDriverWait
注:可通过WebDriverWait类—>快速导包 -
实例化WebDriverWait类并调用until(method)方法
method:匿名函数
WebDriverWait(driver,timeout=10,poll_frequency=0.5).
until(lambda x:x.find_element_by_id("#user")).send_keys("admin")
# 参数:
# timeout: 超时时间
# poll_frequency: 访问频率,默认0.5秒找一次元素
# x: x为driver,它是WebDriverWait类将传入的driver赋值给self._driver,until方法调用了self._driver
- 特点
只针对一个元素有效。
七、下拉框 类包
(一)为什么单独使用下拉框?
如果option选项没有value值的化,css定位或其他定位就不太方便。
(二)如何使用Select类
- 导包:
from selenium.webdriver.support.select improt Select - 实例化:s = Select(element)
- 调用方法:s.select_by_index()
(三)调用方法
- 通过下标定位
s.select_by_index() - 通过value值定位
s.select_by_value() - 通过文本定位
s. select_by_visible_text()
(四)注意事项
- 实例化select时,需要的参数为 select标签元素。
- 调用Select类下面的方法,是通过索引、value属性值、显示文本去控制,而不需要click事件。
八、对话框
(一)类型
- alert # 警告框
- confirm # 确认框
- prompt # 提示框
注:以上三种对话框,处理方法都一样。
(二)处理方法
- 切换到对话框
driver.switch_to.alert - 处理对话框
alert.text 获取文本
alert.accept() 同意
alert.dismiss() 取消
注:以上三种对话框,处理方法都一样。
九、滚动条 scrollTo
在selenium中没有直接提供定位滚动条组件方法,但是它提供了执行js语句方法,可以通过js语句来控制滚动条操作。
方法:
- 设置操作滚动条操作语句
- 调用执行js方法,将设置js语句传入方法中
#示例:
js = "window.scrollTo(0,10000)"
#0: 左边距 -->水平滚动条
#10000:上边距 -->垂直滚动条
driver.execute_script(js) # 调用
十、切换frame表单
(一)作用
当前主目录内没有iframe表单页面元素信息,不切换,找不到元素。常用的frame表单有两种:frame、iframe。
(二)切换frame
driver.switch_to.frame() # 切换frame
driver.switch_to.frame("id\name\element")
#切换frame时,可以使用name、id、iframe元素
(三)回到主目录
driver.switch_to.default_content()
十一、多窗口切换
(一)作用
页面存在多个窗口式,seleniu默认焦点只会在主窗口上所有的元素,不切换切换窗口,无法操作除主窗口以外的窗口内元素。
(二)切换思路及步骤
思路:获取要切换的窗口句柄,调用切换方法进行切换。
步骤:
- 获取当前窗口句柄
- 点击链接 启动另一个窗口
- 获取当前所有窗口句柄
- 遍历所有窗口句柄
- 判断当前遍历的窗口句柄不等于当前窗口句柄
- 切换窗口操作
(三)方法
- 获取当前主窗口句柄
driver.current_window_handle
- 获取当前由driver启动所有窗口句柄
driver.window_handles
- 切换窗口
driver.switch_to.window(handle)
十二、截屏
(一)应用场景
失败截图,让错误看的更直观
(二)方法
driver.get_screenshot_as_file(imgepath)
# imagepath:为图片要保存的目录地址及文件名称,如: 当前目录 ./test.png、上一级目录 ../test.png。
(三)扩展
多条用例执行失败,会产生多张图片,可以采用时间戳的形式,进去区分。
操作:
driver.get_screenshot_as_file("../image/%s.png"% (time.strftime("%Y_%m_%d %H_%M_%S")))
# strftime:将时间转为字符串函数
# %Y_%m_%d %H_%M_%S:代表,年 月 日 时 分 秒
driver.get_screenshot_as_file("../image/{}.png" . format(time.strftime("%Y_%m_%d %H_%M_%S")))
十三、验证码
(一)验证码处理方式
- 去掉验证码(项目在测试环境、公司自己的项目)
- 设置万能验证码(测试环境或线上环境,公司自己项目)
- 使用验证码识别技术 (由于现在的验证码千奇百怪,导致识别率太低)
- 使用cookie解决(推荐)
十四、cookie
方法:
01. 获取所有的cookie
driver.get_cookies()
02. 设置cookie
driver.add_cookies({字典})
注意: 必须进行刷新操作。