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响应状态码,比如:

    7: NoSuchElement

    11: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来驱动。

  • 相关阅读:
    oracle 导入数据时提示只有 DBA 才能导入由其他 DBA 导出的文件
    oracle 常用语句
    android udp 无法收到数据 (模拟器中)
    android DatagramSocket send 发送数据出错
    AtCoder ABC 128E Roadwork
    AtCoder ABC 128D equeue
    AtCoder ABC 127F Absolute Minima
    AtCoder ABC 127E Cell Distance
    CodeForces 1166E The LCMs Must be Large
    CodeForces 1166D Cute Sequences
  • 原文地址:https://www.cnblogs.com/wwwblender-3dcn/p/13463335.html
Copyright © 2011-2022 走看看