zoukankan      html  css  js  c++  java
  • 01-web自动化基础篇

     

    1、搭建环境

    需要的环境

    • 浏览器(Firefox/Chrome/IE…)-----选择Chrome
    • Python
    • Selenium
    • Selenium IDE(如果用Firefox)
    • FireBug、FirePath(如果用Firefox)
    • chromedriver、IEDriverServer、phantomjs.exe
    • IDE(Pycharm/Sublime/Eclipse…)

    1.1、安装selenium

    pip install selenium

    1.2、下载chromedriverchromedriver

    没有64位版本,32即可驱动[下载链接]

    放置在python根目录,大版本要对应

    2、控制浏览器

    from selenium import webdriver
    
    browse =webdriver.Chrome()#实例化,打开浏览器
    browse.maximize_window()#最大化浏览器
    browse.implicitly_wait(8)#设置隐式时间等待
    browse.get('https://www.baidu.com')
    browse.quit()

    使用的是Selenium 的 WebDriver API ,主要涉及两个类

    •  WebDriver 类:主要靠直接实例化该类为对象,然后用其对象直接调用该类的方法和属性
      •   Chrome 是 WebDriver 的子类,是 WebDriver 类的一种
    •  WebElement 类:主要通过 WebDriver 类实例化的对象,通过对页面元素的查找,得到 WebElement 类的对象,然后调用该类的方法和属性
    # 浏览器打开网址
    driver.get("https://www.baidu.com")
    
    # 浏览器最大化
    driver.maximize_window()
    
    # 设置浏览器的高度为800像素,宽度为480像素
    driver.set_window_size(480, 800)
    
    # 浏览器后退
    driver.back()
    
    # 浏览器前进
    driver.forward()
    
    # 浏览器关闭
    driver.close()
    
    # 浏览器退出
    driver.quit()

    3、webDriver工作原理


    3.1一条Selenium脚本执行时后端都发生了哪些事情

    • 对于每一条Selenium脚本,一个http请求会被创建并且发送给浏览器的驱动
    • 浏览器驱动中包含了一个HTTP Server,用来接收这些http请求
    • HTTP Server接收到请求后根据请求来具体操控对应的浏览器
    • 浏览器执行具体的测试步骤
    • 浏览器将步骤执行结果返回给HTTP Server
    • HTTP Server又将结果返回给Selenium的脚本,如果是错误的http代码我们就会在控制台看到对应的报错信息

    3.2为什么使用HTTP协议呢?

    因为HTTP协议是一个浏览器和Web服务器之间通信的标准协议,而几乎每一种编程语言都提供了丰富的http libraries,这样就可以方便的处理客户端Client和服务器Server之间的请求request及响应response,WebDriver的结构中就是典型的C/S结构,WebDriver API相当于是客户端,而小小的浏览器驱动才是服务器端。

    那为什么同一个浏览器驱动即可以处理Java语言的脚本,也可以处理Python语言的脚本呢?

    这就要提到WebDriver基于的协议:JSON Wire protocol

    JSON Wire protocol是在http协议基础上,对http请求及响应的body部分的数据的进一步规范。

    我们知道在HTTP请求及响应中常常包括以下几个部分:http请求方法、http请求及响应内容body、http响应状态码等。

    常见的http请求方法:

    GET:用来从服务器获取信息。比如获取网页的标题信息

    POST:向服务器发送操作请求。比如findElement,Click等

    http响应状态码:

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

    7: NoSuchElement

    11:ElementNotVisible

    200:Everything OK

    现在到了最关键的http请求及响应的body部分了:

    body部分主要传送具体的数据,在WebDriver中这些数据都是以JSON的形式存在并进行传送的,这就是JSON Wire protocol。

    JSON是一种数据交换的格式,是对XML的升级与替代,下面是一个JSON文件的例子:

    {

    "firstname": "Alex",
    "lastname": "Smith",
    "moble": "13300000000"
    }

    下面的例子是WebDriver中在成功找到一个元素后JSON Wire Protocol的返回:

    {"status" : 0, "value" : {"element" : "123422"}}


    所以在Client和Server之间,只要是基于JSON Wire Protocol来传递数据,就与具体的脚本语言无关了,这样同一个浏览器的驱动就即可以处理Java语言的脚本,也可以处理Python语言的脚本了。

  • 相关阅读:
    WeakHashMap回收时机结合JVM 虚拟机GC的一些理解
    java socket 模拟im 即时通讯
    记录 serverSocket socket 输入,输出流,关闭顺序,阻塞,PrintWriter的一些问题.
    Socket 参数笔记
    MongoDB的DBREF 使用.
    MongoDB,子查询
    MongoDB,分组,聚合
    在SAP Data Intelligence Modeler里创建新的pipeline
    SAP Data Intelligence Modeler里的Kafka Producer和Kafka Consumer
    从SAP Leonardo到SAP Data Intelligence
  • 原文地址:https://www.cnblogs.com/testeremma/p/12214396.html
Copyright © 2011-2022 走看看