首页 > 编程知识 正文

前端自动化测试框架,ui自动化测试用例设计

时间:2023-05-05 13:20:40 阅读:12858 作者:2849

本栏内所有项目均使用py charm 2020.1专业版,下载后可自行在网上查找和解读教程。WEB UI自动化测试框架搭建(一)~(七)源代码:https://download.csdn.net/download/qq_38175040/18339296

前言以以下代码为例。 刚开始selenium的人几乎都是这样写的吧。

fromseleniumimportwebdriverdriver=web driver.chrome (driver.get ) ' https://mail.163.com/' ) I_frame=driver.get driver.switch_to.frame(I_frame ) driver.find_element_by_name ) email ).send_keys ) (my_seys ) 这个代码非常直线,用代码的形式一行一行地写必要的操作。 想象一下首先。 如果需要测试完整的系统,这样写代码可能需要写1000到2000行。 这样长的代码很难读,系统页面的元素发生变化后,就可以在几千行代码中准确地找到需要修改的地方。其次,此类代码还具有只能测试一个系统的致命缺点。 要测试其他系统,必须逐个修改find_element和send_keys捆,并大幅更改代码。 这显然是不可能的。

我们建立自动化测试框架,拒绝上述线性且辛苦的代码。

PO模式说到WEB UI自动化框架,不得不说是PO模式。 在实际的测试中,每个公司的页面几乎都有变动的频率,因此自动化也必须相应地进行变更,难度变高了。 因此,提出了PO模型。 其中最基本的概念是每个页面都被视为类。 如果页面元素在实际操作中发生更改,则可以相应地更改与页面对应的类,从而大大提高可维护性。

我们的WEB UI自动化框架核心由以下三个模块组成:

对象层:用于存储每一页,每一页被视为一个类。 (类具体实现了元素定位和控件操作。)

逻辑级别:一些功能用例的模块(例如,登录、注销、更改密码属于不同的模块)。

业务层:真正实现测试用例的操作部分(将对不同模块的操作组合起来,最终实现对完整系统的自动化测试) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。

Utils软件包在其下存储的所有公共方法和工具类在前言的代码中,无论行数如何,明显出现最多的就是find_element。 因为自动化操作中进行最多的是确定各个要素进行操作。

另外,考虑到操作中的等待时间等,通常会在代码中添加很多time.sleep (。 代码中都有find_element和time.sleep (),行数太多眼睛会痛。因而,我们引入了Utils模块,将所有公用的方法封装在其中。

1.我们首先新建一个工程:

2.并在该工程下创建一个.py文件,其中的内容就是前言里粘贴的那一段代码。

可以看到有三个find_element。 然后将其打包为公共方法。

3.在该工程下新建一个package

将此包命名为Utils,并将所有公共方法放在此包中。

4.在Utils包下面新建一个fin_ele.py文件,这个文件会封装所有的driver.find_element_方法

以下是封装所有其他文件中使用的driver.find_element_方法的find_element函数的详细说明。

传递三个参数。 根据驱动程序、名称或id搜索到的find_type和特定值。 这定义了放置元素的封装函数。

然后写一下这个函数。

effind _ element (驱动程序,find_type,find_key ) : element=driver.find _ element ) by=find_type,value

5.然后改写login_test.py内的driver.find_element_方法。

请贴上代码:

fromseleniumimportwebdriverfromutils.fin _ eleimportfind _ element驱动程序=web驱动程序. chrome (

river.get('https://mail.163.com/')i_frame = driver.find_element_by_tag_name('iframe')driver.switch_to.frame(i_frame)# driver.find_element_by_name('email').send_keys('my_username')# driver.find_element_by_name('password').send_keys('my_password')# driver.find_element_by_id('dologin').click()find_element(driver,'name','email').send_keys('my_username')find_element(driver,'name','password').send_keys('my_password')find_element(driver,'id','dologin').click()

find_element这个函数没有声明,需要导入一下。
然后运行此时的login_test.py,发现效果和之前一样。

6.在代码中添加time.sleep()然后优化封装

重写一下封装方法:

from selenium.webdriver.support.wait import WebDriverWaitdef find_element(driver,find_type,find_key): # element = driver.find_element(by=find_type,value=find_key) # return element try: element = WebDriverWait(driver,10).until(lambda driver:driver.find_element(by = find_type,value = find_key)) return element except Exception as e: raise e

使用WebDriverWait比在代码中硬塞很多time.sleep()高级很多,time.sleep()是每次都必定等待这么长的时间。而WebDriverWait可以在规定的时间内等待后续的查找元素或者输入内容等操作的返回结果,若操作成功则跳过这次规定等待的剩余时间继续执行下一步操作,而如果在这次规定的时间内仍然没有操作成功,就会报错。
然后将login_test.py文件中的time.sleep()全部去掉。

import timefrom selenium import webdriverfrom Utils.fin_ele import find_elementdriver = webdriver.Chrome()driver.get('https://mail.163.com/')i_frame = driver.find_element_by_tag_name('iframe')driver.switch_to.frame(i_frame)# driver.find_element_by_name('email').send_keys('my_username')# driver.find_element_by_name('password').send_keys('my_password')# driver.find_element_by_id('dologin').click()find_element(driver,'name','email').send_keys('my_username')find_element(driver,'name','password').send_keys('my_password')find_element(driver,'id','dologin').click()

去掉time.sleep()之后运行程序,这三步的find_element每一步都操作成功,跳过了WebDriverWait规定的等待时间,在一秒内执行完成,如果继续使用time.sleep()的话这边可能要执行6~7秒。

继续努力,争取早点娶老婆淡淡的电源!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。