selenium ,web控件定位,常见操作,控件交互进阶

Posted CSR-kkk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium ,web控件定位,常见操作,控件交互进阶相关的知识,希望对你有一定的参考价值。

控件定位


推荐使用顺序

id, name
CSS Selector
Xpath
Link
Class Name
Tag Name

id

selenium 自带 id 定位,通过元素 ID 属性进行定位

driver.find_element_by_id('su')

name

selenium 自带 name 定位,通过元素的 name 属性进行定位

driver.find_element_by_name('name')

XPATH

XML Path Language
用于解析 html 与 xml

缺点:速度相对慢

表达式说明
/从根节点开始 或 当前节点的子元素
//从当前节点开始匹配所有的子孙节点
.选取当前节点
..选取当前节点的父节点
@选取属性
//*选取所有元素

Chrome 浏览器 --> console:
$x('//*[@id="kw"]')
$x('//*[@id="s_tab"]//a[1]') 第一个
$x('//*[@id="s_tab"]//a[last()]') 倒数第一个
$x('//*[@id="s_tab"]//a[last()-1]') 倒数第二个


CSS Selector

速度比 Xpath 更快

选择器例子说明
.class.className选择 class=“className” 的所有元素
#id#name选择 id=“name” 的所有元素
**选择所有元素
elementp选择所有<p>元素
element,elementdiv,p选择所有<div>元素和所有<p>元素
element elementdiv p选择<div>元素内部所有的<p>元素(子孙元素
element>elementdiv>p选择父元素为<div>元素的所有<p>元素(子元素
element+elementdiv+p选择紧接在<div>元素之后的所有<p>元素
[attribute][target]选择带有target 属性的所有元素
[attribute=value][target=_blank]选择 target="_blank"的所有元素
:nth-child(n)a:nth-child(3)选择属于其父元素的第三个子元素的每个<a>元素
element~element2p~ul选择前面有<p>元素的每个<ul>元素

Selenium 用法

self.driver.find_element(By.XPATH, '//*[@id="kw"]').send_keys("selenium")
self.driver.find_element(By.ID, "kw").send_keys("selenium")
self.driver.find_element(By.CSS_SELECTOR, "#su").click()
self.driver.find_element(By.CSS_SELECTOR, "[id=su]").click()

link

利用元素文字进行定位

driver.find_element_by_link_text('Selenium installation')

# 部分匹配
driver.find_element_by_partial_link_text('Selenium')

tag_name

通过dom中的标签定位

driver.find_element_by_tag_name('img')

*:尽量不要使用,重复元素过多


class_name

通过元素的 class 属性值进行定位

driver.find_element_by_class_name('cn')



常见操作

点击,输入,清除

driver.find_element_by_id('wd').send_keys('selenium')
dirver.find_element_by_id('su').click()
driver.find_element_by_name('wd').clear()

获取元素属性

ele = driver.find_element_by_id('su')

ele.get_attribute('value')
ele.size()
ele.location()

获取页面源代码

driver.page_source()

打开浏览器,设置窗口大小,刷新页面

driver.get('http://www.baidu.com')
driver.minimize_window() # 最小化
driver.maximize_window() # 最大化

关闭窗口、浏览器

driver.page_source()



交互

官方文档:https://selenium-python.readthedocs.io/api.html

ActionChains

执行PC端的 鼠标事件(点击,双击,右键,拖拽等)

原理:调用方法ActionChains(),将动作存入队列,使用perform()方法执行

driver = webdriver.Chrome()
action = ActionChains(dirver)
action.click()
action.perform()
表达式说明
click(on_element=None)鼠标左键点击
context_click(on_element=None)鼠标右键点击
double_click(on_element=None)鼠标双击
move_by_offset(xoffset, yoffset)指定鼠标移动到某个位置
move_to_element(to_element)将鼠标移动到指定元素(to_element)
move_to_element_with_offset(to_element, xoffset, yoffset)移动鼠标到某个元素位置的偏移位置
drag_and_drop(source, target)将 source 元素拖拽到 target 元素上
drag_and_drop_by_offset(source, xoffset, yoffset)将目标拖动到指定位置
click_and_hold(on_element=None)按住鼠标左键不放
release(on_element=None)在指定元素释放,如无则原地释放
send_keys(*keys_to_send)键盘输入
send_keys(“name”)输入字符串”name“
send_keys(Keys.SPACE)键盘输入空格
key_down(value, element=None)按住某个键
key_up(value, element=None)松开某个键
perform()执行action

举例:实现Ctrl+C

ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()



TouchActions

模拟PC和移动端的手势操作(点击,滑动,拖拽,多点触控等)

配置:

opt = webdriver.ChromeOptions()
opt.add_experimental_option('w3c', False)
self.driver = webdriver.Chrome(chrome_options=opt)

详细方法,参数查看官方文档
https://selenium-python.readthedocs.io/api.html#module-selenium.webdriver.common.touch_actions


form 操作

与点击,输入等事件是一样的流程,不再赘述

以上是关于selenium ,web控件定位,常见操作,控件交互进阶的主要内容,如果未能解决你的问题,请参考以下文章

Selenium处理常见web控件-table

Selenium 日期控件处理

python+selenium web界面有一个输入框,点击弹出时间选择控件,输入框不让输入数字。如何定位并input

python selenium 处理时间日期控件(十五)

基于python实现UI自动化3.4 JS 处理日历控件(删除 readonly 属性)

selenium + python自动化测试unittest框架学习webdriver对页面其他控件操作