0%

Selenuim原理

一、DOM(Document Object Model)文档对象模型

DOM技术的解析方式:将标记型文档解析一颗DOM树,并将书中的内容都封装成节点
将页面看成文档document
1580971054(1)
Selenuim就是利用DOM树来定位元素的。8种方法

  • 可以通过JavaScript等编程语言对DOM进行访问,在Selenuim中也可以使用JavaScript
    1580971754(1)

二、WebDriver原理

Selenuim2是利用浏览器原生的API(所以不同浏览器有不同的驱动),封装成一套更加面向对象的Selenuim WebDriver API
基本概念:

  • Client:客户端,使用webdriver的机器
  • Server:运行RemoteWebDriver的机器;也可是运行包含有webdriver的浏览器的机器
  • Session:一个浏览器维护一个session;命令可以通过发送给session来实现相对应的浏览器的交互
  • WebElement:用来代替页面上dom元素的webdriver对象

HtmlUnit Driver没有浏览器的WebDriver

  1. 启动WebDriver
  2. 浏览器输入http://localhost:4444/wd/hub/static/resource/hub.html,可生成sessionid
  3. 发送请求

/session/{session id}/url:打开网页
1580977866(1)
/session/{session id}/element:查找元素
1580978191(1)
方法文档

用java代码实现:
1580978345(1)

  • 第一步:会先启动一个webdriver服务,并且访问http://localhost:4444/wd/hub/static/resource/hub.html创建session,然后webdriver带着sessionid去调用浏览器api新建了窗口

  • 第二步:driver这个对象就等同于sessionid,当执行第二步这行代码,实际是去请求webdriver的get接口,然后webdriver收到请求后,去调浏览器API输入url访问,因为有了sessionid,所以webdriver、浏览器知道是在那个窗口打开url。

  • 第三步:请求webdriver的find element接口,参数xpath、value值,拿到elementid,然后再去请求webdriver的element send keys接口,webdriver调用浏览器API输入值。看是一步,实际是有两次请求完成这步的,因为selenium-java.jar封装,所以明眼看不出来而已。

所以很明显了,实际是我们去请求webdriver,然后webdriver去调用浏览器
1580978889(1)
1580979016(1)
1580979044(1)

参考:https://blog.csdn.net/ouyanggengcheng/article/details/78028215

三、PO(页面对象模式)

使用面向对象的设计模式,页面对象模型将测试代码被测试页面的页面元素及其操作方法进行分离,以此降低页面元素变化对测试代码的影响。每一个被测试页面都会被单独定义为一个类,类中会定位所有需进行测试操作的页面元素对象,并且定义操作每一个页面元素对象的方法。
页面对象
1580985657(1)
PO模式封装:selenium初始化、销毁等、pages层、operation、test层
各层代码简单示例:https://mp.weixin.qq.com/s/KnybXPJkLMIQoVLZC8nl-Q
其他风格代码参考:https://www.cnblogs.com/wuyn/p/10167742.html
https://www.cnblogs.com/yytesting/p/6973474.html
引申:一个页面可以有多个页面类
注意在面向对象中,继承和组合都是代码重用的重要方式,尤其组合。
1580986873(1)