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语言的脚本了。

  • 相关阅读:
    codeforces 455B A Lot of Games(博弈,字典树)
    HDU 4825 Xor Sum(二进制的字典树,数组模拟)
    hdu 1800 Flying to the Mars(简单模拟,string,字符串)
    codeforces 425A Sereja and Swaps(模拟,vector,枚举区间)
    codeforces 425B Sereja and Table(状态压缩,也可以数组模拟)
    HDU 4148 Length of S(n)(字符串)
    codeforces 439D Devu and Partitioning of the Array(有深度的模拟)
    浅谈sass
    京东楼层案例思维逻辑分析
    浅谈localStorage和sessionStorage
  • 原文地址:https://www.cnblogs.com/testeremma/p/12214396.html
Copyright © 2011-2022 走看看