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


driver = webdriver.Chrome()

3|22. 浏览器中加载url


driver.get(url)

3|33. 浏览器窗口最大化


driver.maximize_window()

3|44. 浏览器窗口固定大小


driver.set_window_size(x, y)

3|55. 向前


driver.forward()

3|66. 后退


driver.back()

3|77. 刷新


driver.refresh()

3|88. 截屏


driver.get_screenshot_as_file(filename)

3|99. 设置等待时间:时间单位为s,有时候页面元素加载不全的时候,我们需要去用等待时间,等待页面加载完全


import time time.sleep(n)

3|1010. 获得当前页面的url


driver.current_url

3|1111. 获得当前页面的标题


driver.title

3|1212. 退出


driver.quit() 用于结束进程,关闭所有的窗口,最后测试结束的时候,建议大家用quit close() 用于关闭当前窗口,当打开的窗口较多时,就可以用close关闭部分窗口

 

4|0四. 常用定位


find_element_by_XXX  只返回符合定位表达式的html页面中的第一个元素

find_elements_by_XXX  返回的是一个列表

以百度首页为例

4|11. id定位(优先使用id,但如果id是动态生成的,就不能使用了)


id中带数字的就要注意一下,看是不是动态的

driver.find_element_by_id("kw)

4|22. class定位


driver.find_element_by_class_name("s_ipt) driver.find_elements_by_class_name("s_ipt)

4|33. name定位


driver.find_element_by_name("wd) driver.find_elements_by_name("wd)

4|44. tag name定位


driver.find_element_by_tag_name("input) driver.find_elements_by_tag_name("input)

4|55. link text定位


driver.find_element_by_link_text("贴吧") #利用全部link文本定位

4|66. partial link text定位


driver.find_element_by_partial_link_text("贴") #利用部分link文本定位

4|77. xpath定位


driver.find_element_by_xpath() driver.find_elements_by_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__

本文作者cnhkzyy
本文链接https://www.cnblogs.com/my_captain/p/9162887.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   cnhkzyy  阅读(1800)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示