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

原文地址:https://www.cnblogs.com/testeremma/p/12214396.html