基于python语言的Selenium自动化测试

Posted 懒虫小园

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于python语言的Selenium自动化测试相关的知识,希望对你有一定的参考价值。

 

一、Selenium简介

Selenium是一个web自动化应用测试工具,还支持所有的web的管理任务自动化。并且开源免费,也是一个web自动化轻量级框架。它支持多种浏览器、跨平台、跨操作系统、支持多种编程语言编写脚本,还能进行分布式测试用例的执行。

Selenium经历三个版本,Selenium1、Selenium2、Selenium3。它不是单独的一个工具,而是由一些类库、插件、工具等组合而成。主要的工具:

Selenium IDESelenium IDE是嵌入火狐浏览器中的一个插件,主要用于浏览器操作失误录制与回放,而且录制的脚本可以转换成多种语言,可以通过转换的语言进行开发测试脚本。初级学习人员可以先通过该插件入手学习Selenium自动化测试。

Selenium Grid自动化辅助工具,能够加快Web-APP的功能测试。

Selenium RCSelenium 核心部分,能够支持多种不同编程语言进行编写自动化测试脚本,例如常用Java和python语言进行编写selenium自动化测试脚本。

WebDriver在Selenium 2.0版本中,新增加了WebDriver. WebDriver是专门针对各个浏览器而开发,取代了嵌入到被测Web应用中的JavaScript。与浏览器的紧密集成支持创建更高级的测试,避免了JavaScript安全模型导致的限制。除了来自浏览器厂商的支持,WebDriver还能够利用操作系统级的调用来模拟用户输入。除了支持各个浏览器,还能支持安卓跟iPhone移动应用测试。

二、Windows测试环境的搭建

1、安装Python

本文主要是基于python语言的自动化测试,首先要安装python。在网络上下载最新本的python3.6版本。如果Windows是32位,则选择x86版本下载安装,如果是64位操作系统,则选择64版本。本文以64版本为例。下载完成后,双击安装程序包进行安装,一般选择自定义安装,并且勾选自动添加环境变量,如下图所示:

(1)安装过程跟安装一般的软件一样操作,安装完成之后可以在开始菜单中看到安装好的python目录,如下图所示:

(2)安装完成之后就可以打开自带的IDLE编写Python程序,如图所示:

2、pip安装

pip是一个安装和管理python包的工具。导入一些python非内置的类库、模块、工具等就是用pip安装。但现在版本的Python安装包已集成pip,不需要我们另外进行安装了。检查python是否已经集成安装pip,我们可以通过在安装目录下查看Script是否有pip.exe等文件,如下图:如果有可以直接使用pip命令。

3、seleniumd安装

上述所述安装pip,就是为了方便安装Selenium包。通过pip命令可以直接安装Selenium包,不过在安装Selenium时最好选择低版本的,一般选择Selenium2.0以上,Selenium3.0以下的版本比较合适。要想安装selenium某个版本,需要在命令里面指定版本号安装,例如:

>>>pip install selenium==2.53.0

4、JetBrains PyCharm 安装

JetBrains PyCharm是python开发环境的编译器。PyCharm具备一般IDE的功能,比如, 调试代码、语法高亮、Project管理、智能提示、单元测试等。

(1)首先下载安装包,然后自定义安装,按照一般软件安装即可。

(2)安装好后首次使用需要进行配置,一般选择默认即可。

(3)设置好后新建项目会提示选择python版本,选择我们安装的路径即可。如图:

 5、浏览器驱动安装

WebDriver支持各种浏览器,但是需要安装对应的浏览器驱动才能正常调用浏览器运行。根据自己的系统和浏览器下载不同版本的驱动,下载的驱动文件需要放置到系统环境变量Path下面,浏览器安装文件下,例如火狐浏览器驱动,如图:

 三、selenium自动化测试基础知识

1、调用浏览器驱动,访问地址方法

driver = webdriver.Firefox()

driver.get("网址")

2、定位元素方法

Id 定位: find_element_by_id()  id必须是唯一的

Name定位:find_element_by_name()

Class定位:find_element_by_class_name()

Tag 定位:find_element_by_tag_name()

Link定位:find_element_by_link_text()  专门定位文本链接

Partial link定位:find_element_by_partial_link_text()

Xpath定位:

(1)绝对路径定位

find_element_by_xpath(“html/body/div/div[2]/div/div/div/from/span/input”)

(2)元素属性定位:find_element_by_xpath(“//input[@id=’kw’]”)

(3)层级与属性结合:find_element_by_xpath(“//form[@id=’form’]/span/input”)

(4)使用逻辑运算符find_element_by_xpath(“//input[@id=’kw’ and @class=’su’/span/input]”)

CSS 定位:

(1)通过class属性定位:find_element_by_css_selector(“.s_ipt”)

(2)通过id属性定位:find_elememt_by_css_selector(“#kw”)

(3)通过标签名定位:find_element_css_selector(“input”)

     1)通过父子关系定位:find_element_css_selector(“span>input”)

     2)通过属性定位:find_element_by_css_selector(“[name=’kw’]”)

     3)通过组合定位:find_element_by_css_selector(“form.fm>span>input.s_ipt”)

By定位元素:find_element(By.ID,”kw”)

3、设置浏览器大小

driver.set_window_size(480, 800):设置浏览器大小(480,800)

4、提交输入框数据

driver.find_element_by_id(‘txtUser‘).send_keys(‘黄文婷‘):提交登录账号黄文婷

5、鼠标操作

ActionChains 类提供的鼠标操作的常用方法:

perform() 执行所有ActionChains 中存储的行为

context_click() 鼠标右击

double_click() 鼠标双击

drag_and_drop() 鼠标拖动

move_to_element() 鼠标悬停

6、休眠方法

sleep(3):设置休眠3秒

7、表单切换

switch_to_frame() 默认可以直接取表单的id 或name 属性进行切换。

8、多窗口切换

current_window_handle:获得当前窗口句柄

window_handles:返回的所有窗口的句柄到当前会话

switch_to_window():用于切换到相应的窗口

9、处理警告框

text :获取alert/confirm/prompt 中的提示信息。

Accept:点击确认按钮。

dismiss :击取消按钮。

四、简单示例

以下是一个简单的自动化登录测试用例:

#coding=utf-8

from selenium import webdriver

import unittest

import time

from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

class SouthInfoManagePlatform(unittest.TestCase):

    def setUp(self):

        print(‘开始执行测试用例‘)

        self.driver = webdriver.Firefox()

        self.driver.get("http://192.168.10.42:8787/")

 

    def tearDown(self):

        # self.driver.quit()

        print(‘测试用例执行结束!‘)

    def test_scenario_001(self):

        "一个简单的测试场景"

        print(‘用户登录:‘)

        self.driver.find_element_by_id(‘txtUser‘).clear()#取消默认账号

        self.driver.find_element_by_id(‘txtUser‘).send_keys(‘黄文婷‘)#用户名

        self.driver.find_element_by_id(‘txtUser‘).clear()

        self.driver.find_element_by_id(‘txtPwd‘).send_keys(‘123‘)#密码

        logincode=self.driver.get_cookies()[1]["value"]   

        self.driver.find_element_by_xpath(".//*[@id=‘txtCheckCode‘]").send_keys(logincode)

        #time.sleep(3)

        self.driver.find_element_by_name(‘IbtnLogin‘).click()

        time.sleep(3)

以上是关于基于python语言的Selenium自动化测试的主要内容,如果未能解决你的问题,请参考以下文章

selenium2自动化测试实战--基于Python语言

基于Selenium+Python的web自动化测试框架

selenium自动化实战-基于python语言(环境搭建)

基于Selenium2与Python自动化测试环境搭建

Selenium2+Python自动化测试实战

一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试