Selenium简单使用介绍
部分测试基于百度首页
本地html读取方式driver.get('file:///Workspace/static-web/selenium.html')
以下内容基于:Python 3.7.4
selenium 3.141.0
Chrome 80.0.3987.132 64bit
一、安装准备
python
模块安装1
2pip install selenium
conda install seleniumWebDriver
下载安装- 驱动识别引入
将文件路径添加到系统环境变量
PATH
中
直接将驱动文件放置到python安装目录下的bin
目录中
二、使用
1、控制并打开浏览器窗口
1 |
|
2、元素定位
推荐顺序 id > css 选择器XPATH
定位准确编写复杂且不利于debug
链接文本(部分)只适用于 a
链接元素
以下内容返回第一个匹配的元素,适用find_elements_xx
可返回多个元素
定位元素 | 示例 | 使用方式 |
---|---|---|
class名称 | class="index-logo-src" |
driver.find_element_by_class_name('index-logo-src') |
css选择器 | #lg .index-logo-src |
driver.find_element_by_css_selector('#lg .index-logo-src') |
id | #lg |
driver.find_element_by_id('#lg') |
name | name="mp" |
driver.find_element_by_name('mp') |
链接部分显示不符 | <a>更多产品</a> |
driver.find_element_by_link_text('更多产品') |
链接文本部分 | <a>更多产品</a> |
driver.find_element_by_partial_link_text('更多') |
tag标签 | <map></map> |
driver.find_element_by_tag_name('map') |
xpath选择 | class="index-logo-src" |
driver.find_element_by_xpath('//div//img[@class="index-logo-src"]') |
3、控制浏览器
操作 | 方法 |
---|---|
打开浏览器 | driver.get('http://www.baidu.com') |
当前地址 | driver.current_url |
前进 | driver.forward() |
后退 | driver.back() |
刷新 | driver.refresh() |
标题 | driver.title |
当前窗口handle |
driver.current_window_handle |
退出 | driver.quit() |
窗口大小 | driver.get_window_size().get("width") height |
重置窗口 | driver.set_window_size(1024, 768) |
窗口位置 | driver.get_window_position().get('x') |
设置窗口位置 | driver.set_window_position(0, 0) |
窗口最大化 | driver.maximize_window() |
全屏 | driver.fullscreen_window() |
切换窗口 – 官网示例
如果点击链接后会打开新的tab
窗口,必须要切换窗口,driver
才会跟着切换到新的窗口
1 |
|
4、等待
等待期望元素加载完成。默认等待策略检测document.readyState
状态变为complete
,此时如果有script
脚本创建元素,可能会出现无法定位到的情况
显示等待
1
210:等待时间 秒
WebDriverWait(driver, timeout=10).until(lambda d: d.find_element_by_class_name('index-logo-src'))等待条件
详情见from selenium.webdriver.support import expected_conditions
弹窗 - 警告 提示 确认
元素存在
元素可见
标题包含
标题是隐式等待
适合于明确页面元素加载需要一定时间1
2driver = webdriver.Chrome()
driver.implicitly_wait(10)FluentWait
可以配置等待时间,检查频率以及对某些异常的忽略1
2wait = WebDriverWait(driver, timeout=10, poll_frequency=1, ignored_exceptions=NoSuchElementException)
wait.until(EC.element_to_be_clickable(By.XPATH, "//div"))5、
JavaScript
弹窗识别
JavaScript
弹出的警告、确认、提示
1
2
3
4
5
6
7
8
9
10
11
12
13
14alert = wait.until(EC.alert_is_present())
// 警告 alert()
text = alert.text # 弹窗文本
alert.accept() # 确认
// 确认 confirm()
text = alert.text # 弹窗文本
alert.accept() # 确认
alert.dismiss() # 取消
// 提示框 prompt() 需要输入文本
alert = Alert(driver)
alert.send_keys("Selenium") # 测试时在chrome未生效
alert.accept()
6、系统键
ActionChains
需要使用perform()
才会生效
send_keys:
1 |
|
keyDown:模拟按下修改键(CONTROL,SHIFT,ALT)的动作
1 |
|
keyUp:模拟修改键(CONTROL,SHIFT,ALT)的向上(或)释放操作
1 |
|
clear:清空文本
1 |
|
7、示例
以百度搜索,进入百度翻译,并修改翻译内容为例
1 |
|