UI自动化这个层次来说主要目前有三个方向:
- 元素定位,pc代表工具是selenium,移动端是appium
- 座标定位 pyautogui
- 图像识别airtest,sikuli
本次介绍selenium工具
一.常用的8种元素定位方法
定位方法,selenium4 以后所有的定位元素的方法都被封装了:
class By:
ID = "id"
NAME = "name"
CLASS_NAME = "class name"
TAG_NAME = "tag name"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
XPATH = "xpath"
CSS_SELECTOR = "css selector"
-
通过ID 定位元素:
#ID定位元素,打印一个WebElement对象
em=wd.find_element(by=By.ID,value='su')
print(em)
-
通过NAME 定位元素:
#定位元素,打印一个WebElement对象
em=wd.find_element(by=By.NAME,value='su')
print(em)
-
通过CLASS_NAME 定位元素:
#定位元素,打印一个WebElement对象
em=wd.find_element(by=By.CLASS_NAME,value='s_ipt')
print(em)
-
通过TAG_NAME定位元素:
em=wd.find_element(by=By.TAG_NAME,value='input')
print(em)
5.通过LINK_TEXT, PARTIAL_LINK_TEXT定位元素:
em=wd.find_element(by=By.LINK_TEXT,value='贴吧')
print(em)
em=wd.find_element(by=By.PARTIAL_LINK_TEXT,value='贴吧')
print(em)
6.CSS_SELECTOR元素定位利器,实际工作中的页面几乎都是框架自动生成的,所以1-5的定位方法实际使用不多,css一种定位方式。详细语法:https://www.w3school.com.cn/cssref/css_selectors.asp
a. id,html标签,class进行选择
wd.find_element(by=By.CSS_SELECTOR,value='.s_ipt').send_keys('66')
wd.find_element(by=By.CSS_SELECTOR,value='#kw').send_keys('66')
em=wd.find_elements(by=By.CSS_SELECTOR,value='input')
print(em)
wd.quit()
b.css通过属性定位
wd.find_element(by=By.CSS_SELECTOR,value='input[name="wd"]').send_keys('66')
c.父子层级定位
em=wd.find_element(by=By.CSS_SELECTOR,value='div[id="s-top-left"]>a:nth-child(1)')
print(em.text)
d.正则匹配
^:以什么开头
$:以什么结尾
*:匹配所有
em=wd.find_element(by=By.CSS_SELECTOR,value='span[class^="bg"]>input')
print(em.send_keys(666))
- xpath 定位
前面我们学习了CSS 选择元素,大家可以发现非常灵活、强大。还有一种 灵活、强大 的选择元素的方式,就是使用 Xpath 表达式。XPath (XML Path Language) 是由国际标准化组织W3C指定的,用来在 XML 和 HTML 文档中选择节点的语言。目前主流浏览器 (chrome、firefox,edge,safari) 都支持XPath语法,既然已经有了CSS,为什么还要学习 Xpath呢? 因为有些场景 用 css 选择web 元素 很麻烦,而xpath 却比较方便。另外 Xpath 还有其他领域会使用到,比如 爬虫框架 Scrapy, 手机App框架 Appium。
a. 绝对路径
b.相对路径
c.属性选择
d.次序选择
e.组选择、父节点、兄弟节点
1、child 选取当前节点的所有子元素
2、parent 选取当前节点的父节点
3、descendant 选取当前节点的所有后代元素(子、孙等)
4、ancestor 选取当前节点的所有先辈(父、祖父等)
5、descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身
6、ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身
7、preceding-sibling 选取当前节点之前的所有同级节点
8、following-sibling 选取当前节点之后的所有同级节点
9、preceding 选取文档中当前节点的开始标签之前的所有节点
10、following 选取文档中当前节点的结束标签之后的所有节点