当前位置:   article > 正文

从python角度解析selenium原理

从python角度解析selenium原理

在这里插入图片描述

1、selenium工作流程

图片

2、selenium工作原理

(1)客户端和服务端之间实际是通过http协议进行通信,服务端的接口文档可参考:https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#sessionsessionidelement

(2)客户端按照服务端接口要求传入请求方式、请求url和请求数据,然后发送http请求,服务端收到请求后驱动浏览器执行命令;

(3)selenium实际已封装好各种操作接口的请求函数,用户只需通过指定的方法传入数据即可,如get、click、find_element实际都是封装了整个http请求过程的方法;

即测试人员仅需根据功能需求调用对应的方法并传参即可,最终由selenium组装请求信息后发送请求;

(4)可见,完全可以跳过selenium,自己通过requests模块构建请求信息发送给驱动程序,从而驱动浏览器执行相关操作。

3、从selenium源码角度剖析selenium原理

(1)先说明一下

以下例子,以python、chrome驱动程序、chrome浏览器展开说明。

(2)通过selenium实现工作流

 1  1 # 启动chrome浏览器
 2  2 driver = webdriver.Chrome()
 3  3 # 访问百度网站
 4  4 driver.get("http://www.baidu.com")
 5  5 # 查找输入框元素
 6  6 ele = driver.find_element_by_id("kw")
 7  7 # 在输入框中输入“selenium”
 8  8 ele.send_keys("selenium")
 9  9 # 查找百度一下按钮
10 10 ele = driver.find_element_by_id("su")
11 11 # 点击百度一下按钮
12 12 ele.click()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

(3)selenium源码解析

① driver = webdriver.Chrome()

启动chromedriver驱动程序,启动后可通过http://ip:port访问驱动程序

图片

通过execute方法,构建“创建新会话”接口的请求信息,并发送http请求,返回会话id:

请求方式:POST
请求地址:http://localhost:post/session
请求数据:data = {"desiredCapabilities":{
          "browserName": "chrome",
          "version":"85.0.4183.83",
          "platform":"WINDOWS"}
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

图片

图片

② driver.get(“http://www.baidu.com”)

通过execute方法,按get命令的接口信息构建http请求信息,并发送http请求:

请求方式:POST
请求地址:http://localhost:post/session/$sessionId/url(sessionId为会话id,从①中获取)
请求数据:{"url": "http://www.baidu.com"}
  • 1
  • 2
  • 3

图片

图片

③ driver.find_element_by_id(“kw”)

通过execute方法,按find_element_by_id命令的接口信息构建http请求信息,并发送http请求:

请求方式:POST
请求地址:http://localhost:post/session/$sessionId/element(sessionId为会话id,从①中获取)
请求数据:{"using":"id","value":"kw"}
  • 1
  • 2
  • 3

图片

图片

④ ele.send_keys(“selenium”)

通过execute方法,按send_keys命令的接口信息构建http请求信息,并发送http请求:

请求方式:POST
请求地址:http://localhost:post/session/$sessionId/element/$id/value(sessionId为会话id,从①中获取,id为元素id,从③获取)
请求数据:{"value": ["selenium"]}
  • 1
  • 2
  • 3

图片

图片

图片

⑤ ele.click()

通过execute方法,按click命令的接口信息构建http请求信息,并发送http请求:

请求方式:POST
请求地址:http://localhost:post/session/$sessionId/element/$id/click(sessionId为会话id,从①中获取,id为元素id,从③获取)
请求数据:无
  • 1
  • 2
  • 3

在这里插入图片描述

在这里插入图片描述

图片

4、通过requests模块实操验证selenium实现原理

(1)代码实现

# TODO 访问域名
 base_url = "http://localhost:9515"

 # TODO 创建会话
 url = base_url + "/session"
 data = {
         "desiredCapabilities":{
                 "browserName": "chrome",
                 "version":"85.0.4183.83",
                 "platform":"WINDOWS"
         }
}
res = request("POST",url,json=data)
session_id = res.json()["sessionId"]    # 返回会话id

sleep(2)

# TODO 发送get命令 - 访问某个网站
url = base_url + "/session/{}/url".format(session_id)
data = {
     "url": "http://www.baidu.com"
}
res = request("POST",url,json=data)

# TODO 发送find_element命令 - 查找元素
url = base_url + "/session/{}/element".format(session_id)
data = {
     "using":"id",
     "value":"kw"
}
res = request("POST",url,json=data)
ele = jsonpath(res.json(),"$..ELEMENT")[0]      # 返回元素id

# TODO 发送send_keys命令 - 输入内容
url = base_url + "/session/{}/element/{}/value".format(session_id,ele)
data = {
     "value": ["selenium"]
}
res = request("POST",url,json=data)

# TODO 发送find_element命令 - 查找元素
url = base_url + "/session/{}/element".format(session_id)
data = {
     "using":"id",
     "value":"su"
}
res = request("POST",url,json=data)
ele = jsonpath(res.json(),"$..ELEMENT")[0]      # 返回元素id

# TODO 发送click命令 - 元素点击
url = base_url + "/session/{}/element/{}/click".format(session_id,ele)
res = request("POST",url)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

(2)运行结果

图片

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 759968159,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保证100%免费】

在这里插入图片描述

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/358289
推荐阅读
相关标签
  

闽ICP备14008679号