题记
示例代码 优化代码
1.新建login数据2.元素基类编写3.元素 *** 作组装类4.编写测试用例类5.运行脚本 总结
代码博客园地址
题记今天主要跟大家讲述一下自动化分层的原理,讲述一下为什么需要做数据分离
在自动化测试过程中,把测试数据从测试代码中分离出来,可以大大降低维护脚本的成本。
例如:使用代码与测试数据分离,当测试数据发生变化时,只需要修改数据即可,不会对主干代码产生影响。
示例代码# -*- coding: utf-8 -*- # @Time : 2022/1/6 10:49 # @Author : Limusen # @File : demo_baidu_26 import time from selenium import webdriver driver = webdriver.Chrome() driver.get("https://www.baidu.com") driver.implicitly_wait(10) driver.find_element_by_id("kw").send_keys("测试一下不分离") driver.find_element_by_id("su").click() time.sleep(2) driver.quit()优化代码
这种方式实际上就是将单个元素封装成一个属性,然后通过调用属性来试下数据分离,但是一个页面上有很多元素,都写在一个类里面就会显得代码很臃肿,所以我们采用封装成三层来进行元素读取和调用
# -*- coding: utf-8 -*- # @Time : 2022/1/6 10:49 # @Author : Limusen # @File : demo_baidu_26 import time from selenium import webdriver from selenium.webdriver.common.by import By from common.element_excel_utils import ElementExcelUtils driver = webdriver.Chrome() driver.get("https://www.baidu.com") driver.implicitly_wait(10) # driver.find_element_by_id("kw").send_keys("测试一下不分离") # driver.find_element_by_id("su").click() "=====================================" # 换一种方式 发现这种方法也可行 kw = (By.ID, "kw") su = (By.ID, "su") # 这种呢 是采用解包的方式实现的与元素分离,将单个元素封装并调用 driver.find_element(*kw).send_keys("测试一下") driver.find_element(*su).click()采用excel中的数据
现在发现我们只需要调用我们之前封装好的底层base_page再去调用我们要 *** 作的,比如click()
只需要传入元素对象即可,不用写太多繁琐的代码
# -*- coding: utf-8 -*- # @Time : 2022/1/6 10:49 # @Author : Limusen # @File : demo_baidu_26 import time from selenium import webdriver from selenium.webdriver.common.by import By from common.element_excel_utils import ElementExcelUtils from common.base_page import basePage # 使用excel中的数据做成关键字进行脚本 driver = webdriver.Chrome() driver.implicitly_wait(10) driver.get("https://www.baidu.com") # 假设我们使用excel里面的数据 element = ElementExcelUtils("baidu", "baidu_page").get_element_info() kw = element["input_kw"] su = element["click_su"] base = basePage(driver) base.input(kw, "测试一下") base.click(su) "====================================="小结
在我们没有将元素分离之前我们是这样
1 driver.find_element_by_id("kw").send_keys("测试一下不分离") 2 driver.find_element_by_id("su").click()
封装好之后的代码是这样的
1 # 假设我们使用excel里面的数据 2 element = ElementExcelUtils("baidu", "baidu_page").get_element_info() 3 4 kw = element["input_kw"] 5 su = element["click_su"]封装元素类
接下来进行数据优化,分层实现读取数据
1.新建login数据新建一个login_page.xls新建login_page.xls文件中填写数据如下
2.元素基类编写
在element_infos新建login包,包下新建login_page.py
在login_page.py文件中编写代码
文件 element_infos/login/login_page.py
# -*- coding: utf-8 -*- # @Time : 2022/1/6 10:19 # @Author : Limusen # @File : login_page from selenium import webdriver from common.base_page import basePage from common.element_excel_utils import ElementExcelUtils class LoginPage(basePage): def __init__(self, driver): # 继承basePage的方法,在此类中可以直接调用 super().__init__(driver) # 将excel中的数据读取到elements中方便调用 elements = ElementExcelUtils('login', 'login_page').get_element_info() self.login_button = elements["login_button"] self.user_name_input = elements["user_name_input"] self.password_input = elements["password_input"] self.switch_login_button = elements["switch_login_button"] def login_action(self, name, psw): # 方法一 直接整合 self.click(self.login_button) self.input(self.user_name_input, name) self.input(self.password_input, psw) self.click(self.switch_login_button) # 方法二 分散写 def click_main_login(self): self.click(self.login_button) def input_username(self, name): self.input(self.user_name_input, name) def input_password(self, pwd): self.input(self.password_input, pwd) def click_login(self): self.click(self.switch_login_button) if __name__ == '__main__': driver = webdriver.Chrome() base = basePage(driver) login = LoginPage(driver) base.open_url("http://shop.aircheng.com/") base.implicitly_wait(10) login.login_action("nswe", "111111")3.元素 *** 作组装类
在根目录新建actionaction下面新建login_action包。新建login.py
action/login_action/login.py
# -*- coding: utf-8 -*- # @Time : 2022/1/6 10:25 # @Author : Limusen # @File : login from selenium import webdriver from common.base_page import basePage from element_infos.login.login_page import LoginPage class Login: def __init__(self, driver): self.login = LoginPage(driver) def login_action(self, name, psw): # 直接调用login_page中的方法一 self.login.login_action(name, psw) return self.login.get_page_source() def logins(self, name, psw): # 自己组装login_page中的方法 self.login.click_main_login() self.login.input_username(name) self.login.input_password(psw) self.login.click_login() return self.login.get_page_source() if __name__ == '__main__': driver = webdriver.Chrome() base = basePage(driver) login = Login(driver) base.open_url("http://shop.aircheng.com/") base.implicitly_wait(10) # login.login_action("nswe", "111111") # 方式一 login.logins("nswe", "111111") # 方式二4.编写测试用例类
5.在test_case当中编写测试用例
# -*- coding: utf-8 -*- # @Time : 2022/1/6 10:33 # @Author : Limusen # @File : test_login import unittest from action.login_action.login import Login from common.base_page import basePage from common.browser_utils import BrowserUtils from common.config_utils import local_config class TestLogin(unittest.TestCase): def setUp(self) -> None: driver = BrowserUtils().get_driver() self.base = basePage(driver) self.login = Login(driver) self.base.open_url(local_config.get_host) self.base.implicitly_wait(10) self.base.set_window_max() def test_login_success(self): result = self.login.logins("nswe", "111111") # 检查nswe是否包含在源码当中 如果有则通过测试 self.assertIn("nswe", result, "测试通过") if __name__ == '__main__': unittest.main()5.运行脚本
运行脚本
自此脚本元素读取封装完毕。可以实现元素分层,只需要修改测试数据,不用修改测试代码.
总结本章主要讲述的是如何将元素分离,首先我们需要创建一个读取excel数据当中的类,取出数据进行 *** 作组装,也就是我们最基础的 element_infos/login/login_page.py ,然后通过action组装我们页面上的 *** 作,比如登录 *** 作,需要我先去点击登录然后再输入账号、密码 *** 作,进行大 *** 作的封装,最后我们通过测试用例去继承我们的action类,进行测试用用例编写。从而达到页面元素分离并实现关键字框架的实用
ui自动化代码分层其实就是为了让我们更好地编写测试用例,能够复用代码,对原始代码的修改小一点,这样做的目的就是为了更好的维护代码.更好的维护测试脚本
代码地址 : https://gitee.com/todayisgoodday/PythonSelenium
博客园地址https://www.cnblogs.com/yushengaqingzhijiao/category/2000515.html
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)