• 基于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)

  • 相关阅读:
    在vue中引入layer弹框的简易方法
    in ./node_modules/qs/lib/index.js Module build failed: Error: ENOENT: no such file or directory, o
    vue路由传参的三种基本方式
    跳转路由时传参,elementUI的table表格点击对应行,获取对应行的数据;更改el-table头部样式
    用Vue写移动端时有哪些UI框架
    1月25日学习日志
    1月22日学习日志
    1月21日学习日志
    1月20日学习日志
    1月19日学习日志
  • 原文地址:https://www.cnblogs.com/hwtfamily/p/8616097.html
Copyright © 2020-2023  润新知