学习笔记二:SeleniumAPI
UI自动化元素的定位技巧:
- 在当前页面是唯一的元素名称:可以在浏览器的console确定元素是否是唯一的(document.querySelectorAll("div#kw"))
- 标签无元素属性时,可以通过父级查找
- 可以使用逻辑符号连接元素and,增加唯一性
- 推荐使用导包By(4.0)
from selenium.webdriver.common.by import By - 4.0增加了相对定位(near/above/below/to_left_of/to_right_of)
Webdriver提供八种定位元素(elements定位一组)
id → find_element(By.ID,"kw")
name → find_element(By.NAME,"wd")
class_name → find_element(By.CLASS_NAME,"s_ipt")
tag_name → find_element(By.TAG_NAME,"input")
link_text → find_element(By.LINK_TEXT,"新闻")
partial_link_text → find_element(By.PARTIAL_LINK_TEXT,"新")
xpath → find_element(By.XPATH,"//*[@class='bg s_btn']/input[2]") '//' 在某一层级下面,'/'在html下面
- 任意标签--->contains 包含文本
- css--->定位第二个标签的子元素
css → find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input:nth-child(2)#su")
注:#代表id .代表class
常用API
1、设置浏览器窗口尺寸
driver.set_window_size(480, 800)
2、浏览器前进、后退
driver.forward()
driver.back()
3、模拟浏览器刷新
driver.refresh()
4、鼠标事件
from selenium.webdriver.common.action_chains import ActionChains--->导包
perform(): 执行所有 ActionChains 中存储的行为
context_click(): 右击
double_click(): 双击
drag_and_drop(): 拖动
move_to_element(): 鼠标悬停
示例:ActionChains(driver).click_and_hold(above).perform()#鼠标悬停
5、键盘事件
from selenium.webdriver.common.keys import Keys---->导包
常用键盘操作:
send_keys(Keys.BACK_SPACE) 删除键
(BackSpace) send_keys(Keys.SPACE) 空格键
(Space) send_keys(Keys.TAB) 制表键
(Tab) send_keys(Keys.ESCAPE) 回退键
(Esc) send_keys(Keys.ENTER) 回车键
(Enter) send_keys(Keys.CONTROL,'a')全选
(Ctrl+A) send_keys(Keys.CONTROL,'c') 复制
(Ctrl+C) send_keys(Keys.CONTROL,'x') 剪切
(Ctrl+X) send_keys(Keys.CONTROL,'v') 粘贴
(Ctrl+V) send_keys(Keys.F1) 键盘 F1
6、获得验证信息
title:用于获得当前页面的标题
current_url:用户获得当前页面的
URL text:获取搜索条目的文本信息
7、显示等待 :显式等待使 WebdDriver 等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常 (TimeoutException)
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
- driver :浏览器驱动。
- timeout :最长超时时间,默认以秒为单位。
- poll_frequency :检测的间隔(步长)时间,默认为 0.5S。
- ignored_exceptions :超时后的异常信息,默认情况下抛 NoSuchElementException 异常。
- WebDriverWait()一般由 until()或 until_not()方法配合使用,下面是 until()和 until_not()方法的说明。
until(method, message='')--->调用该方法提供的驱动程序作为一个参数,直到返回值为 True。
until_not(method, message='')--->调用该方法提供的驱动程序作为一个参数,直到返回值为 False。
expected_conditions 类所提供的预期条件判断的方法如下:
presence_of_element_located()方法判断元素是否存在。
title_is--->判断当前页面的标题是否等于预期
title_contains--->判断当前页面的标题是否包含预期字符串
presence_of_element_located--->判断元素是否被加在 DOM 树里,并不代表该元素一定可见
visibility_of_element_located--->判断元素是否可见(可见代表元素非隐藏,并且元素的宽和高都不等于 0)
visibility_of--->与上一个方法作用相同,只是上一个方法参数为定位,该方法接收的参数为定位后的元素
presence_of_all_elements_located--->判断是否至少有一个元素存在于 DOM 树中。例如,在个页面中有 n 个元素的 class 为“wp”,那么只要有一个存在就返回 True
text_to_be_present_in_element--->判断某个元素中的 text 是否包含了预期的字符串
text_to_be_present_in_element_value--->判断某个元素的 value 属性是否包含了预期的字符串
frame_to_be_available_and_switch_to_it--->判断该表单是否可以切换进去,如果可以,返回 True 并且 switch 进去,否则返回 False
invisibility_of_element_located--->判断某个元素是否不存在于 DOM 树或不可见
element_to_be_clickable--->判断元素是否可见并且是可以点击的
staleness_of--->等到一个元素从 DOM 树中移除
element_to_be_selected--->判断某个元素是否被选中,一般用在下拉列表
element_selection_state_to_be--->判断某个元素的选中状态是否符合预期
element_located_selection_state_to_be--->与上一个方法作用相同,只是上一个方法参数为定位后的元素,该方法接收的参数为定位
alert_is_present--->判断页面上是否存在 alert
8、隐式等待:
implicitly_wait():设置页面元素等待时间,默认设置为 0,作用于每一个元素。
set_page_load_timeout(3):设置页面加载超时时间
set_script_timeout(7):设置脚本加载超时时间
9、多表单切换
switch_to.frame(ID/NAME/属性)
switch_to.parent_frame()
switch_to.default_content()跳回最外层的页面
10、多窗口切换
current_window_handle:获取当前窗口句柄
window_handles:获取所有打开的窗口句柄
switch_to.window(all[-1]):用于切换到相应的窗口
11、警告框处理
switch_to.alert.accept()
text:返回 alert/confirm/prompt 中的文字信息。
accept():接受现有警告框。
dismiss():解散现有警告框。
send_keys(keysToSend): 发送文本至警告框。
keysToSend:将文本发送至警告框。
12、上传文件(https://www.jb51.net/article/92678.htm)
send_keys上传文件目录
AutoIt上传
13、下载文件:需要设置浏览器配置(https://www.cnblogs.com/bzdmz/p/10330111.html)
14、操作cookie
get_cookies(): 获得所有 cookie 信息。
get_cookie(name): 返回字典的 key 为“name”的 cookie 信息。
add_cookie(cookie_dict): 添加 cookie。“cookie_dict”指字典对象,必须有 name 和 value 值。
delete_cookie(name,optionsString):删除 cookie 信息。“name”是要删除的 cookie 的名称,
“optionsString”是该 cookie 的选项,目前支持的选项包括“路径”,“域”。
delete_all_cookies(): 删除所有 cookie 信息。
15、调用js
js = "window.scrollTo(100,450)"
driver.execute_script(js)
16、截取当前窗口
get_screenshot_as_file(保存位置)
17、下拉框处理
from selenium.webdriver.support.select import Select
Select(sel).select_by_value('50')定位下接选项中的 value 值
常用方法
clear(): 清除文本
send_keys(*value): 模拟按键输入
click(): 单击元素
submit():用于提交表单
size: 返回元素的尺寸
text: 获取元素的文本
get_attribute(name): 获得属性值
is_displayed(): 设置该元素是否用户可见
close():关闭当前窗口 quit():关闭所有窗口
如果找不到元素,排查原因
- 元素是不是唯一的
- 是不是有表单嵌套(进入/退出)
- 元素是否可见
- 页面执行时间过快(dom还未完全加载出来)
- 业务依赖关系(可能没有进入页面,却操作该页面元素)
- dom树发生了变化(刷新界面)

浙公网安备 33010602011771号