zoukankan      html  css  js  c++  java
  • selenium的工作原理

    之前用python的第三方库selenium,搭配unittes,HTMLTestRunner,jenkins来进行自动化测试,大概的流程就是找元素,操作元素,获取结果进行比较,其中有很多api可以使用,但是它的工作原理是怎么样的呢?先来看一张图

    客户端:就是我们的各种语言,python,java,用来发起请求的

    webdriver协议:实质上就是一种http协议,但是它基于一种严格的json协议JSON Wire protocol

    浏览器驱动:各种浏览器都有对应的驱动,比如谷歌的chromedriver.exe、火狐的geckodriver.exe、IE的IEDriverServer.exe

    过程如下:

    1.运行用python写好的selenium脚本,它会像web service中发送一个http请求

    2.浏览器驱动中的web service 会根据这个请求生成对应的js脚本,因为不同的浏览器,相同的操作生成的js脚本会有所不同,因此不同的浏览器要有不同的驱动

    3.js脚本驱动浏览器,产生各种操作,并返回给web service

    4.web service将结果通过http响应的形式返回给客户端

    必须指出的是:

    1.在WebDriver中为了给用户以更明确的反馈信息,提供了更细化的http响应状态码,比如:

    207: NoSuchElement

    211:ElementNotVisible

    200:Everything OK

    2.返回值类似于{ "sessionid":123, "status" : 0, "value" : {"element" : "123422"}},这可能是一个查找元素的返回(get_element_by_id),因为带有sessionid,因此grid可以实现分布式,操作多个浏览器

    3.只要语言实现了webdriver协议就可以,所以同一个浏览器的驱动就即可以处理Java语言的脚本,也可以处理Python语言的脚本了。

    其实这个和之前说的appium的原理一样,都是用到了webdriver协议来发送请求,获取响应,也和语言无关,但是不同的是appium service会生成bootstrap.js/bootstrap.jar,并将其注入到device中来驱动其中的uiautomator/uiautomation,以此来达到驱动device的目的,而selenium则使用js来驱动。

  • 相关阅读:
    Go网络文件传输
    Go网络编程
    LNMP环境搭建(PHP7.4.0)
    LNMP环境搭建(PHP7.2.25)
    Please ensure the argon2 header and library are installed
    MySQL权限管理
    nginx ingress controller配置默认SSL证书
    kubernetes pod内抓包,telnet检查网络连接的几种方式
    ansible取出register变量中最长字符串
    kubernetes flannel pod CrashLoopBackoff解决
  • 原文地址:https://www.cnblogs.com/diwangguilai/p/11245588.html
Copyright © 2011-2022 走看看