python selenium框架原理_Selenium2 框架概述

本文介绍了Selenium2框架的基本概念和工作原理,包括WebDriver和Browser Driver的作用。通过Python代码示例展示了如何编写自动化测试脚本,并讨论了Selenium2在测试中的应用,如Page Object Module模式提高代码可维护性。
摘要由CSDN通过智能技术生成

我自己是自动化测试的小菜鸟,接触这个领域不到1年时间,没有实践经验,目前的只在实习项目中学习到了一些相关知识。想通过写文章的方式归纳总结,让自己对这段时间的学习有一个沉淀。

【Selenium2简介】

官网的说明:

Selenium automates browsers. That's it! What you do with that power is entirely up to you. Primarily, it is for automating web applications for testing purposes, but is certainly not limited to just that. Boring web-based administration tasks can (and should!) also be automated as well.

Selenium has the support of some of the largest browser vendors who have taken (or are taking) steps to make Selenium a native part of their browser. It is also the core technology in countless other browser automation tools, APIs and frameworks.

翻译过来是:

Selenium可以让浏览器自动执行各种Web应用。它目前主要用于Web端的自动化测试,但它并不仅仅局限于此。它还可以用于自动化管理基于Web的各种无聊费时的任务。

Selenium目前被一些使用广泛的浏览器厂商所支持,并作为功能的一部分加入到了浏览器中。它也是无数其他测试工具、API和框架的核心技术支撑。

PS:

Selenuim2集成了WebDriver API,而且目前基本上主流浏览器(Chrome/Firefox/Opera/IE)都支持WebDriver API,并且提供了相应的WebDriver工具,所以“Selenium目前被一些使用广泛的浏览器厂商所支持”还是很有说服力的。

我自己去看了下国内外的许多自动化测试平台,包括BAT各自的测试平台、Sauce Labs,他们Web端都支持Selenium测试脚本。

【WebDriver】

在Selenium看来,WebDriver的目的是提供一个使用简单、逻辑简洁的编程接口。WebDriver官方的说明是:它是一个远程的控制接口,可以通过它控制我们的代理。它提供的是一个平台化的、独立于任何语言的线路协议(自行翻译的),可以通过这个协议远程控制Web浏览器的行为。它提供了一系列的接口可以用于发现和操作我们的Web文档中的DOM元素,从而控制用户代理(浏览器)的行为。

所以可以认为WebDriver提供了一套可以远程控制浏览器行为的线路协议(wire protocol),简单粗暴点就是遵循这个协议可以让浏览器运行测试脚本。

官网链接:https://www.w3.org/TR/webdriver/

【Browser Driver】

Browser Driver一般是一个EXE(可执行)程序,或者浏览器的一个扩展程序,它使用HTTP Server持续监听Selenium2 Commands。

各个浏览器的Driver可从这里下载:http://www.seleniumhq.org/download/

【Selenium2工作原理】

Selenium2使用的是Selenium WebDriver,其工作原理大致如下图所示:

具体的执行步骤如下:

每个Selenium命令,这里指的是所谓的基础操作,例如,点击、输入等,都会创建一条HTTP请求,发送给Browser WebDriver

Browser WebDriver使用一个HTTP Server监听和接收HTTP请求

HTTP Server根据协议规则定义这些Selenium命令对应的浏览器具体操作

浏览器执行这些操作

浏览器将执行状态返回给HTTP Server

HTTP Server再将这些状态信息返回给自动化脚本

PS:上述的所有操作都在同一个Session(定义在这里https://www.w3.org/TR/webdriver/#sessions)中进行的;

协议规则指的是之前提到的WebDriver;

【Selenium2工作过程】

环境安装这里不做介绍,其实通过了解上述的Selenium2工作原理会对环境安装有进一步的理解。

Selenium2脚本编写语言支持:Java/C#/Python/Ruby/PHP/Perl/JavaScript,选择自己喜欢的语言即可,我比较喜欢Java和Python。

下面的是一个Python编写的自动化脚本实例:

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

driver = webdriver.Chrome()

driver.get("http://www.python.org")

assert "Python" in driver.title

elem = driver.find_element_by_name("q")

elem.send_keys("pycon")

elem.send_keys(Keys.RETURN)

assert "No result found." not in driver.page_source

driver.close()

上述的Selenium Commands模拟的是用户对浏览器的一系列操作,这些操作通过Browser Driver执行,具体的步骤如下:

selenium.webdriver模型提供了所有浏览器的WebDriver支持。Keys类提供了键盘响应事件,例如:RETURN,F1,ALT这些

实例化一个Chrome WebDriver

判断页面的Title中应该包含字符串“Python”,不包含报错

获取搜索输入框

输入字符串“pycon”

按下键盘的RETURN键

判断页面的document资源里没有字符串“No result found.”,有报错

关闭浏览器,关闭Chrome WebDriver

Selenium WebDriver涉及的操作我做了如下归类:

如果你懂JS,那么直接执行JS代码是最有效的。WebDriver执行Selenium Command调用的是浏览器内置的自动化支持功能。

等待操作在实际使用过程中经常被用到,在操作某个对象之前,我们往往要等到该对象在页面中加载完成,这里我们用wait until来实现。

wait = ui.WebDriverWait(dr, 10)

wait.until(lambda dr: dr.find_element_by_class_name('label').is_displayed())

这里wait.until的功能是:

until方法会一直等下去,直到代码中的内容为true(不为false或没有抛出异常)

或者超时(这里指等待时间超过10s)

常用的判断有:

title_is

title_contains

presence_of_element_located

visibility_of_element_located

visibility_of

presence_of_all_elements_located

text_to_be_present_in_element

text_to_be_present_in_element_value

frame_to_be_available_and_switch_to_it

invisibility_of_element_located

element_to_be_clickable - it is Displayed and Enabled.

staleness_of

element_to_be_selected

element_located_to_be_selected

element_selection_state_to_be

element_located_selection_state_to_be

alert_is_present

另外,在自动化测试中经常用到的 —— Page Object Module,提倡以页面为单位进行元素管理和一些操作。它的好处是:

代码可重用性高

减少冗余代码

可维护性高

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值