web自动化:selenium原理和元素定位(一)
1|0一. Selenium2 WebDriver
- 当Selenium2.x提出了WebDriver的概念后,它提供了完全另外的一种方式与浏览器交互
-
那就是利用浏览器原生的API,封装成一套更加面向对象的Selenium WebDriver API,直接操作浏览器页面里的元素,甚至操作浏览器本身(截屏、窗口大小、启动、关闭、安装插件、配置证书之类的)
-
由于使用的是浏览器原生的API,速度大大提高,而且调用的稳定性交给了浏览器厂商本身,显然是更加科学
-
然而带来的一些副作用就是,不同的浏览器厂商,对web元素的操作和呈现多少会有一些差异,这就直接导致了Selenium WebDriver要分浏览器厂商不同,而提供不同的实现
-
例如Firefox就有专门的FirefoxDriver,Chrome就有专门的ChromeDriver等等(甚至包括了AndroidDriver和IOS WebDriver)
2|0二. Selenium环境搭建以及原理解释
简而言之,就是selenium里面的webdriver会直接控制浏览器(通过不同浏览器的驱动),然后对目标进行测试—>UI层面的
3|0三. 常用方法
3|11. 创建对象driver
3|22. 浏览器中加载url
3|33. 浏览器窗口最大化
3|44. 浏览器窗口固定大小
3|55. 向前
3|66. 后退
3|77. 刷新
3|88. 截屏
3|99. 设置等待时间:时间单位为s,有时候页面元素加载不全的时候,我们需要去用等待时间,等待页面加载完全
3|1010. 获得当前页面的url
3|1111. 获得当前页面的标题
3|1212. 退出
4|0四. 常用定位
find_element_by_XXX 只返回符合定位表达式的html页面中的第一个元素
find_elements_by_XXX 返回的是一个列表
以百度首页为例
4|11. id定位(优先使用id,但如果id是动态生成的,就不能使用了)
id中带数字的就要注意一下,看是不是动态的
4|22. class定位
4|33. name定位
4|44. tag name定位
4|55. link text定位
4|66. partial link text定位
4|77. xpath定位
4|88. CSS定位
CSS中, #id值 .class值 写法是标签名[属性名=值]
CSS中用空格表示层级关系, 如 span input中sapn是input的父级
实例1:通过id来定位输入框,前面的*表示标签名
实例2:通过属性name来定位输入框,前面的*表示标签名
实例3:通过class定位输入框
实例4:层级定位,用空格分割
5|0五. xpath定位
5|11. 绝对路径定位:以 "/" 开头,从文档的根节点开始解析。可使用浏览器调试工具,来直接获得xpath语句
5|22. 绝对路径的缺点
当页面结构有调整的时候,路径也随之失效,必须重写,不方便后期维护
5|33. 相对路径定位:以"//"开头,从文档的任何元素节点开始解析
其他语法:
表达式 | 描述 |
nodename | 选取此节点的所有子节点 |
. | 选取当前节点 |
.. | 选取当前节点的父节点 |
@ | 选取属性, 举例://div[@属性名称="属性值"] |
* | 通配符,匹配所有 |
实例1:定位百度输入框,根据属性name="wd" (可在谷歌浏览器调试工具中按Ctrl + F打开定位输入框)
实例2:如果//标签[@属性]仍然有多个元素,可考虑层级定位,举个例子,如果input有多个时,可考虑层级定位(找父级或父级以上)
5|44. xpath定位和函数和逻辑
函数和逻辑 | 描述 | 举例 |
text() | 元素的text内容 | //*[@id="xxx"]//p[text()="xxxx"] |
contains(@属性/text(), value) | 包含函数 | contains(@class, "xxx"), contains(text(), "xxxx") |
and or |
表示条件与 表示条件或 |
//div[@class="xxx" and contains(@style, "display:visibility")] |
实例1:利用xpath text()函数定位
实例2:利用xpath contains()函数定位
实例3:利用xpath 逻辑与定位
5|55. 弹出框问题
一个页面的几个操作,都会有弹出框出现,定位到弹出框会有几个,但通过display的值来定位到当前显示的那一个
-
"display=none"表示无弹出框
-
"display=block/visibility"表示有弹出框
实例1:百度有弹出框的页面
实例2:百度无弹出框的页面
__EOF__

本文链接:https://www.cnblogs.com/my_captain/p/9162887.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?