selenium常用操作

操作浏览器常用方法

1. maximize_window() 最大化浏览器窗口 --> 模拟浏览器最大化按钮

2. set_window_size(width, height) 设置浏览器窗口大小 --> 设置浏览器宽、高(像素点)

3. set_window_position(x, y) 设置浏览器窗口位置 --> 设置浏览器位置

4. back() 后退 --> 模拟浏览器后退按钮

5. forward() 前进 --> 模拟浏览器前进按钮

6. refresh() 刷新 --> 模拟浏览器F5刷新

7. close() 关闭当前窗口 --> 模拟点击浏览器关闭按钮

8. quit() 关闭浏览器驱动对象 --> 关闭所有程序启动的窗口

9. title 获取页面title

10. current_url 获取当前页面URL

获取元素信息的常用方法

1. size 返回元素大小

2. text 获取元素的文本

3. get_attribute("xxx") 获取属性值,传递的参数为元素的属性名

4. is_displayed() 判断元素是否可见

5. is_enabled() 判断元素是否可用

6. is_selected() 判断元素是否选中,用来检查复选框或单选按钮是否被选中

提示:

size、text:为属性,调用时无括号;如:xxx.size

鼠标操作常用方法

说明:在Selenium中将操作鼠标的方法封装在ActionChains类中

实例化对象:

action = ActionChains(driver)

方法:

1. context_click(element) 右击 --> 模拟鼠标右键点击效果

2. double_click(element) 双击 --> 模拟鼠标双击效果

3. drag_and_drop(source, target) 拖动 --> 模拟鼠标拖动效果

源元素 source = driver.find_element_by_id(xxx)
目标元素 target = driver.find_element_by_id(xxx)
调用方法 action.drag_and_drop(source, target).perform()

4. move_to_element(element) 悬停 --> 模拟鼠标悬停效果

5. perform() 执行 --> 此方法用来执行以上所有鼠标操作

说明:在ActionChains类中所有提供的鼠标事件方法,在调用的时候所有的行为都存储在ActionChains对

象中,

而perform()方法就是真正去执行所有的鼠标事件。

强调:必须调用perform()方法才能执行鼠标事件

为了更好的学习其他方法,我们先学习perform()执行方法,因为所有的方法都需要执行才能生效

鼠标右键案例:
导包:from selenium.webdriver.common.action_chains import ActionChains
实例化ActionChains对象:action = ActionChains(driver)
调用右键方法:action.context_click(element)
执行:action.perform()

键盘操作常用方法

导包:from selenium.webdriver.common.keys import Keys

1. send_keys(Keys.BACK_SPACE) 删除键(BackSpace)
2. send_keys(Keys.SPACE) 空格键(Space)

3. send_keys(Keys.TAB) 制表键(Tab)

4. send_keys(Keys.ESCAPE) 回退键(Esc)

5. send_keys(Keys.ENTER) 回车键(Enter)

6. send_keys(Keys.CONTROL,'a') 全选(Ctrl+A)

7. send_keys(Keys.CONTROL,'c') 复制(Ctrl+C)

示例代码:
# 定位用户名 element = driver.find_element_by_id("userA")
# 输入用户名 element.send_keys("admin1")
# 删除1 element.send_keys(Keys.BACK_SPACE)
# 全选 element.send_keys(Keys.CONTROL, 'a')
# 复制 element.send_keys(Keys.CONTROL, 'c') # 粘贴 driver.find_element_by_id('passwordA').send_keys(Keys.CONTROL, 'v')

元素等待

隐式等待

概念:定位元素时,如果能定位到元素则直接返回该元素,不触发等待; 如果不能定位到该元 素,则间隔一段时间后再去定位元素; 如果在达到最大时长时还没有找到指定元素,则抛出元素 不存在的异常 NoSuchElementException

实现方式:

方法:driver.implicitly_wait(timeout)

(timeout:为等待最大时长,单位:秒)

说明:隐式等待为全局设置(只需要设置一次,就会作用于所有元素)

显示等待

概念:定位元素时,如果能定位到元素则直接返回该元素,不触发等待; 如果不能定位到该元素,则间隔一段时间后再去定位元素; 如果在达到最大时长时还没有找到指定元素,则抛出超时异常 TimeoutException 。

实现方式:
1. 导包 等待类 --> from selenium.webdriver.support.wait import WebDriverWait
2. WebDriverWait(driver, timeout, poll_frequency=0.5)
1). driver:浏览器驱动对象
2). timeout:超时的时长,单位:秒
3). poll_frequency:检测间隔时间,默认为0.5秒
3. 调用方法 until(method):直到...时
1). method:函数名称,该函数用来实现对元素的定位
2). 一般使用匿名函数来实现:lambda x: x.find_element_by_id("userA")
4. element = WebDriverWait(driver, 10, 1).until(lambda x: x.find_element_by_id("userA") )

python
显示等待案例:
import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Firefox()
driver.get("file:///D:/webAutoTest/page/注册A.html")

element = WebDriverWait(driver, 10, 1).until(lambda x: x.find_element_by_id("userA")) element.send_keys("admin")

time.sleep(3)
driver.quit()

显式与隐式区别

1. 作用域:隐式为全局元素,显式等待为单个元素有效

2. 使用方法:隐式等待直接通过驱动对象调用,而显式等待方法封装在WebDriverWait类中

3. 达到最大超时时长后抛出的异常不同:隐式为NoSuchElementException,显式等待为TimeoutException

下拉框操作

思路:先定位到要操作的option元素,然后执行点击操作

select类

说明:Select类是Selenium为操作select标签特殊封装的。
实例化对象:
select = Select(element)
element: <select>标签对应的元素,通过元素定位方式获取,
例如:driver.find_element_by_id("selectA")
操作方法:
1. select_by_index(index) --> 根据option索引来定位,从0开始
2. select_by_value(value) --> 根据option属性 value值来定位
3. select_by_visible_text(text) --> 根据option显示文本来定位

select类实现步骤分析

1. 导包 Select类 --> from selenium.webdriver.support.select import Select
2. 实例化Select类 select = Select(driver.find_element_by_id("selectA"))
3. 调用方法:select.select_by_index(index)

示例代码

from selenium.webdriver.support.select
import Select
select = Select(driver.find_element_by_id("selectA"))
select.select_by_index(2) # 根据索引实现
select.select_by_value("sh") # 根据value属性实现
select.select_by_visible_text("A北京") # 根据文本内容实现

弹出框操作

网页中常用的弹出框有三种
1. alert 警告框
2. confirm 确认框
3. prompt 提示框

弹出框处理方法

说明:Selenium中对处理弹出框的操作,有专用的处理方法;并且处理的方法都一样
1. 获取弹出框对象 alert = driver.switch_to.alert
2. 调用
alert.text --> 返回
alert/confirm/prompt中的文字信息
alert.accept() --> 接受对话框选项
alert.dismiss() --> 取消对话框选项

示例代码

# 定位alerta按钮
driver.find_element_by_id("alerta").click()
# 获取警告框
alert = driver.switch_to.alert
# 打印警告框文本
print(alert.text)
# 接受警告框
alert.accept()
# 取消警告框
# alert.dismiss()

滚动条操作

说明:selenium中并没有直接提供操作滚动条的方法,但是它提供了可执行JavaScript脚本 的方法,所以我们可以通过JavaScript脚本来达到操作滚动条的目的。

1. 设置JavaScript脚本控制滚动条
js = "window.scrollTo(0,1000)"
(0:左边距;1000:上边距;单位像素)
2. selenium调用执行JavaScript脚本的方法
driver.execute_script(js)

示例代码:
# 最底层
js1 = "window.scrollTo(0,10000)"
driver.execute_script(js1)

# 最顶层
js2 = "window.scrollTo(0,0)"
driver.execute_script(js2)

frame切换方法

说明:在Selenium中封装了如何切换frame框架的方法
方法:
1). driver.switch_to.frame(frame_reference) --> 切换到指定frame的方法
frame_reference:可以为frame框架的name、id或者定位到的frame元素
2). driver.switch_to.default_content() --> 恢复默认页面方法

案例

打开‘注册实例.html’页面,完成以下操作
1). 填写主页面的注册信息
2). 填写注册页面A中的注册信息
3). 填写注册页面B中的注册信息

1. 完成主页面注册信息;
2. 调用frame切换方法(switch_to.frame("myframe1"))切换到注册用户A框架中
3. 调用恢复默认页面方法(switch_to.default_content())
4. 调用frame切换方法(switch_to.frame("myframe2"))切换到注册用户B框架中

浏览器窗口切换

说明:在Selenium中封装了获取当前窗口句柄、获取所有窗口句柄和切换到指定句柄窗口的方法;
句柄:英文handle,窗口的唯一识别码
方法:
1). driver.current_window_handle --> 获取当前窗口句柄
2). driver.window_handles --> 获取所有窗口句柄
3). driver.switch_to.window(handle) --> 切换指定句柄窗口

窗口截图

说明:
在Selenium中,提供了截图方法,我们只需要调用即可
方法:
driver.get_screenshot_as_file(imgpath)
imgpath:图片保存路径

代码实例:
driver.get_screenshot_as_file("./img/img01.jpg")

验证码的处理方式

说明:Selenium中并没有对验证码处理的方法,在这里我们介绍一下针对验证码的几种常用处理方式

方式:

​ 1). 去掉验证码

​ (测试环境下-采用)

​ 2). 设置万能验证码

​ (生产环境和测试环境下-采用)

​ 3). 验证码识别技术

​ (通过Python-tesseract来识别图片类型验证码;识别率很难达到100%)

​ 4). 记录cookie

​ (通过记录cookie进行跳过登录)

说明:Selenium中对cookie操作提供相应的方法
方法:
1. get_cookie(name) --> 获取指定cookie
name:为cookie的名称
2. get_cookies() --> 获取本网站所有本地cookies
3. add_cookie(cookie_dict) --> 添加cookie
cookie_dict:一个字典对象,必选的键包括:"name" and "value"

案例

BDUSS是登录百度后的唯一身份凭证(*.baidu.com),拿到BDUSS就等于拿到帐号的控制权, 通行贴吧、知道、百科、文库、空间、百度云等百度主要产品。
1. 登录baidu,登录成功后抓取 (BDUSS)
2. 使用add_cookie()方法,添加 (BDUSS)键和值
3. 调用刷新方法 driver.refresh()

示例代码

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.add_cookie({'name':'BDUSS','value':'根据实际填写'})
time.sleep(3)
driver.refresh()
time.sleep(3)
driver.quit()

自动化测试

robotframework数据库操作

2022-10-20 17:35:51

自动化测试

robotframework变量及常见操作

2022-10-24 17:25:48

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索
Array ( [0] => post [1] => user [2] => document [3] => newsflashes )