ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python+selenium 【第十三章】自动化分层原理,iweb项目实战

2022-01-06 13:35:07  阅读:148  来源: 互联网

标签:iweb Python selenium self driver element input import login


 

题记:

   今天主要跟大家讲述一下自动化分层的原理,讲述一下为什么需要做数据分离

 

在自动化测试过程中,把测试数据从测试代码中分离出来,可以大大降低维护的成本。

例如:使用代码与测试数据分离,当测试数据发生变化时,只需要修改数据即可,不会对主干代码产生影响。

 

当前demo就只是简单的搜索一下就已经有这么多行代码了

 

  • demo_baidu_26.py
 1 # -*- coding: utf-8 -*-
 2 # @Time : 2022/1/6 10:49
 3 # @Author : Limusen
 4 # @File : demo_baidu_26
 5 
 6 import time
 7 from selenium import webdriver
 8 
 9 driver = webdriver.Chrome()
10 
11 driver.get("https://www.baidu.com")
12 driver.implicitly_wait(10)
13 driver.find_element_by_id("kw").send_keys("测试一下不分离")
14 driver.find_element_by_id("su").click()
15 
16 time.sleep(2)
17 driver.quit()

 

  • 优化 并尝试使用新的方法
 1 # -*- coding: utf-8 -*-
 2 # @Time : 2022/1/6 10:49
 3 # @Author : Limusen
 4 # @File : demo_baidu_26
 5 
 6 import time
 7 from selenium import webdriver
 8 from selenium.webdriver.common.by import By
 9 from common.element_excel_utils import ElementExcelUtils
10 
11 driver = webdriver.Chrome()
12 
13 driver.get("https://www.baidu.com")
14 driver.implicitly_wait(10)
15 # driver.find_element_by_id("kw").send_keys("测试一下不分离")
16 # driver.find_element_by_id("su").click()
17 
18 
19 "====================================="
20 
21 # 换一种方式 发现这种方法也可行
22 kw = (By.ID, "kw")
23 su = (By.ID, "su")
24 
25 driver.find_element(*kw).send_keys("测试一下")
26 driver.find_element(*su).click()

 

  • 使用excel中的数据来测试
# -*- 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

"====================================="

# driver = webdriver.Chrome()
# driver.implicitly_wait(10)
# driver.get("https://www.baidu.com")

# driver.find_element_by_id("kw").send_keys("测试一下不分离")
# driver.find_element_by_id("su").click()

# time.sleep(2)
# driver.quit()

"====================================="

# driver = webdriver.Chrome()
# driver.implicitly_wait(10)
# driver.get("https://www.baidu.com")

# # 换一种方式 发现这种方法也可行
# kw = (By.ID, "kw")
# su = (By.ID, "su")
#
# driver.find_element(*kw).send_keys("测试一下")
# driver.find_element(*su).click()

# time.sleep(2)
# driver.quit()
"====================================="

# 使用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_page.xls 

 

1.1 新建login_page.xls文件中填写数据如下

 

2.在element_infos新建login包,包下新建login_page.py

 

2.1 在login_page.py文件中编写代码

  • element_infos/login/login_page.py
 1 # -*- coding: utf-8 -*-
 2 # @Time : 2022/1/6 10:19
 3 # @Author : Limusen
 4 # @File : login_page
 5 
 6 
 7 from selenium import webdriver
 8 from common.base_page import BasePage
 9 from common.element_excel_utils import ElementExcelUtils
10 
11 
12 class LoginPage(BasePage):
13 
14     def __init__(self, driver):
15         # 继承BasePage的方法,在此类中可以直接调用
16         super().__init__(driver)
17         # 将excel中的数据读取到elements中方便调用
18         elements = ElementExcelUtils('login', 'login_page').get_element_info()
19         self.login_button = elements["login_button"]
20         self.user_name_input = elements["user_name_input"]
21         self.password_input = elements["password_input"]
22         self.switch_login_button = elements["switch_login_button"]
23 
24     def login_action(self, name, psw):
25         # 方法一 直接整合
26         self.click(self.login_button)
27         self.input(self.user_name_input, name)
28         self.input(self.password_input, psw)
29         self.click(self.switch_login_button)
30 
31     # 方法二 分散写
32     def click_main_login(self):
33         self.click(self.login_button)
34 
35     def input_username(self, name):
36         self.input(self.user_name_input, name)
37 
38     def input_password(self, pwd):
39         self.input(self.password_input, pwd)
40 
41     def click_login(self):
42         self.click(self.switch_login_button)
43 
44 
45 if __name__ == '__main__':
46     driver = webdriver.Chrome()
47     base = BasePage(driver)
48     login = LoginPage(driver)
49 
50     base.open_url("http://shop.aircheng.com/")
51     base.implicitly_wait(10)
52     login.login_action("nswe", "111111")

 

3.在根目录新建action

4.action下面新建login_action包。新建login.py

  • action/login_action/login.py
 1 # -*- coding: utf-8 -*-
 2 # @Time : 2022/1/6 10:25
 3 # @Author : Limusen
 4 # @File : login
 5 
 6 from selenium import webdriver
 7 from common.base_page import BasePage
 8 from element_infos.login.login_page import LoginPage
 9 
10 
11 class Login:
12 
13     def __init__(self, driver):
14         self.login = LoginPage(driver)
15 
16     def login_action(self, name, psw):
17         # 直接调用login_page中的方法一
18         self.login.login_action(name, psw)
19         return self.login.get_page_source()
20 
21     def logins(self, name, psw):
22         # 自己组装login_page中的方法
23         self.login.click_main_login()
24         self.login.input_username(name)
25         self.login.input_password(psw)
26         self.login.click_login()
27         return self.login.get_page_source()
28 
29 
30 if __name__ == '__main__':
31     driver = webdriver.Chrome()
32     base = BasePage(driver)
33     login = Login(driver)
34     base.open_url("http://shop.aircheng.com/")
35     base.implicitly_wait(10)
36     # login.login_action("nswe", "111111") # 方式一
37 
38     login.logins("nswe", "111111")  # 方式二

 

5.在test_case当中编写测试用例

 

  • testcases/login_sutie/test_login.py
# -*- 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()

 

  • 运行脚本

 

自此脚本元素读取封装完毕。可以实现元素分层,只需要修改测试数据,不用修改测试代码. 

ui自动化代码分层其实就是为了让我们更好地编写测试用例,能够复用代码,对原始代码的修改小一点,如果需要修改元素则直接去excel中直接修改,而不是在py文件中查找元素然后再进行修改.

这样做的目的就是为了更好的维护代码.更好的维护测试脚本

 

标签:iweb,Python,selenium,self,driver,element,input,import,login
来源: https://www.cnblogs.com/yushengaqingzhijiao/p/15770679.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有