欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

简单页面自动化测试框架搭建记录【开发中...】

时间:2023-04-28
基本信息介绍

*编程语言:python3.7使用的包:selenium,ddt,unittest,yaml等*

项目结构: 详细代码

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECclass basePage(object): def __init__(self, driver): self.driver = driver self.driver.maximize_window() def driver_close(self): self.driver.close() def visit(self,url): self.driver.get(url) """ 定位元素的方法+显示等待 selecotr是元祖类型,放入两个值,一个是定位方式,一个是具体的值 x是定位方式,y是值 __selector = selector.lower() """ def get_element(self, selector): __selector = selector x = __selector[0].lower() y = __selector[1] __aaa = ['id', 'name', 'class_name', 'link_text', 'xpath', 'tag_name', 'css_selector'] if x in __aaa: if x == 'id': #显示等待 element = WebDriverWait(self.driver, 10, 1).until(EC.visibility_of(self.driver.find_element(By.ID, y))) #element = self.driver.find_element(By.ID, y) return element elif x == 'name': element = self.driver.find_element(By.NAME, y) return element elif x == 'class_name': element = self.driver.find_element(By.CLASS_NAME, y) return element elif x == 'link_text': element = self.driver.find_element(By.link_TEXT, y) return element elif x == 'xpath': element = WebDriverWait(self.driver, 10, 1).until(EC.visibility_of(self.driver.find_element(By.XPATH, y))) element = self.driver.find_element(By.XPATH, y) return element elif x == 'tag_name': element = self.driver.find_element(By.TAG_NAME, y) return element elif x == 'css_selector': element = self.driver.find_element(By.CSS_SELECTOR, y) return element else: print('错误的定位方式:{}'.format(x) + ',请输入 id name class_name link_text xpath tag_name css_selector 等') """获取当前窗口的url""" def get_current_url(self): current_url = self.driver.current_url return current_url """获取所有窗口句柄""" def get_all_windows(self): windows = self.driver.window_handles print("windows:" + windows) return windows """获取当前窗口句柄""" def get_current_window(self): current_window = self.driver.current_window_handle return current_window """获取当前标题""" def get_title(self): title = self.driver.title return title """切换窗口""" def switch_window(self): # all_window_handles 数据类型是列表 all_window_handles = self.driver.window_handles if len(all_window_handles) > 0: self.driver.switch_to.window(all_window_handles[-1]) """点击操作""" def click(self, selector): item = selector[1] if selector[0].upper() =='XPATH': # 必须加是否可点击判断,否则会报no such element错误 if WebDriverWait(self.driver, 10, 1).until(EC.element_to_be_clickable((By.XPATH, item))).click(): self.get_element(selector).click() elif selector[0].upper() =='ID': # 必须加是否可点击判断,否则会报no such element错误 if WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.ID, item))).click(): self.get_element(selector).click() elif selector[0].upper() =='CLASS_NAME': # 必须加是否可点击判断,否则会报no such element错误 if WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, item))).click(): self.get_element(selector).click() elif selector[0].upper() =='TAG_NAME': # 必须加是否可点击判断,否则会报no such element错误 if WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.TAG_NAME, item))).click(): self.get_element(selector).click() elif selector[0].upper() =='link_TEXT': # 必须加是否可点击判断,否则会报no such element错误 if WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.link_TEXT, item))).click(): self.get_element(selector).click() elif selector[0].upper() =='NAME': # 必须加是否可点击判断,否则会报no such element错误 if WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.NAME, item))).click(): self.get_element(selector).click() elif selector[0].upper() =='CSS_SELECTOR': # 必须加是否可点击判断,否则会报no such element错误 if WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, item))).click(): self.get_element(selector).click() elif selector[0].upper() =='PARTIAL_link_TEXT': # 必须加是否可点击判断,否则会报no such element错误 if WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.PARTIAL_link_TEXT, item))).click(): self.get_element(selector).click() else: print('错误的定位方式:{}'.format(selector[0].upper())) raise ValueError """输入操作""" def type(self, selector, value): element = self.get_element(selector) # 清除操作很重要,细节容易遗漏 element.clear() try: element.send_keys(value) except baseException: print("输入内容错误")

#消费者登陆门户端class CustomerLogin(basePage): username = ('xpath', '/html/body/div[1]/div/div/div[1]/input') password = ('xpath', '/html/body/div[1]/div/div/div[2]/input') login_button = ('xpath', '/html/body/div[1]/div/div/div[4]/button') #用户端登陆 def customerLogin(self): self.type(self.username, "user20220105") self.type(self.password, "123456abc") self.click(self.login_button)

from time import sleepfrom selenium.webdriver.common.keys import Keysfrom Common.basePage import basePageimport datetimeclass EditKnPage(basePage): # 知识点名称 title = ("XPATH", '//*[@id="app"]/div/div[2]/div[2]/div[2]/div[1]/input') # 分类 class_icon = ("XPATH", '//*[@id="app"]/div/div[2]/div[2]/div[1]/div[1]/div[2]/i') # 待删除分类 class_1 = ("XPATH", "//*[@id='tree']/li/ul/li[3]/span[2]/span") # 分类确定按钮:这个元素是变化的!!!!坑了很久 使用last() class_ensure = ("XPATH", '/html/body/div[last()]/div/div[2]/div/div[2]/div[3]/div/button[2]') # 选择应用端 apply_site_baike = ("XPATH", "//*[@id='app']/div/div[2]/div[2]/div[1]/div[2]/div[2]/label[1]/span[2]/span") apply_site_bot = ("XPATH", "//*[@id='app']/div/div[2]/div[2]/div[1]/div[2]/div[2]/label[2]/span[2]/span") # 领域编辑按键 field_icon = ("XPATH", "//*[@id='app']/div/div[2]/div[2]/div[1]/div[3]/div[2]/i") field_option = ("XPATH", "//*[@id='tree']/li/ul/li[2]/span[2]/span") field_ensure = ("XPATH", "/html/body/div[last()]/div/div[2]/div/div[2]/div[3]/div/button[2]") # 开放领域 open_to_all_fields = ("XPATH", '//*[@id="app"]/div/div[2]/div[2]/div[1]/div[4]/label/span[2]') # 失效是否可看 expire_to_look_opt1 = ("XPATH", "//*[@id='app']/div/div[2]/div[2]/div[1]/div[5]/div[2]/div/label[2]/span[2]") # 新增答案按钮 add_answer_button = ("xpath", "//*[@id='app']/div/div[2]/div[2]/div[1]/div[6]/button") # 所属词条↓箭头 belong_entry_button = ("xpath", "//*[@id='app']/div/div[2]/div[2]/div[2]/div[4]/div/div[2]/div/div/div[1]/div/div[2]/i") # 词条选择第一个,li[x]/span[2]/span/span belong_entry_first = ("xpath", "/html/body/div[4]/div/div[2]/div/div[2]/div[2]/div/div/div/div/ul/li[2]/span[2]/span/span") # 所选词条,【确定】 belong_entry_close = ("xpath", "/html/body/div[4]/div/div[2]/div/div[2]/div[3]/div/button[2]") # 提交知识点 submit_button = ('xpath', "//*[@id='app']/div/div[2]/div[3]/div[3]/div[2]/button[3]") # 输入知识点名称 def type_kn_title(self): txt = str(datetime.datetime.today())[:-7] self.type(self.title, txt) # 选择分类,默认选择 默认分类 def choose_classification(self): # 点击分类按钮 sleep(1) self.click(self.class_icon) self.click(self.class_1) print('选择待删除分类done') # 点击确定 self.click(self.class_ensure) print('关闭分类弹框done') # 选择应用端 # value: 0全选,1只勾选门户百科,2只勾选问答bot # 默认选1 def choose_apply(self, value=1): if value == 0: self.click(self.apply_site_baike) self.click(self.apply_site_bot) print('应用端选择为【门户bot+百科】') elif value == 1: self.click(self.apply_site_bot) print('应用端选择为【百科】') elif value == 2: self.click(self.apply_site_baike) print('应用端选择为【门户bot】') else: print('value值不正确,请输入0 1 2') # 勾选领域 def choose_field(self): # 点击编辑按钮,打开领域选择 field_icon self.click(self.field_icon) # 选择领域, 【测试领域】 self.click(self.field_option) # 点击确定关闭弹出框 self.click(self.field_ensure) print('勾选领域完成') # 勾选开放领域 def open_to_fields(self): # 点击全选 self.click(self.open_to_all_fields) print('开放领域全选') # 勾选失效是否可看 def expire_to_look(self): # 失效可看 self.click(self.expire_to_look_opt1) print('失效可看') # 新增答案(1个) def add_answers(self): try: self.click(self.add_answer_button) except ValueError: print('edit_kn_page: 新增答案错误') # 所属词条 def belong_entry(self): try: self.click(self.belong_entry_button) self.click(self.belong_entry_first) self.click(self.belong_entry_close) except ValueError: print('edit_kn_page: 所属词条箭头点击失败') def submit_kn(self): try: self.click(self.submit_button) except ValueError: print('edit_kn_page: 提交知识点成功')

from Common.basePage import basePageclass HomePage(basePage): #百科导航栏,//*[@id="app"]/header/div[2]/div/div[2]/div wiki_module = ('xpath', '/html/body/div[1]/header/div[2]/div/div[2]/div') #文库导航栏 doc_module = ('xpath', '//*[@id="app"]/header/div[2]/div/div[3]/div') #学院导航栏 school_module = ('xpath', '//*[@id="app"]/header/div[2]/div/div[4]/div') #社区导航栏 community_module = ('xpath', '//*[@id="app"]/header/div[2]/div/div[5]/div') #跳转到百科 def jump_wiki(self): self.click(self.wiki_module) #跳转到文库 def jump_doc(self): self.click(self.doc_module) #跳转到学院 def jump_school(self): self.click(self.school_module) #跳转社区 def jump_community(self): self.click(self.community_module)

from Common.basePage import basePageclass WikiHomePage(basePage): #新增知识点 new_wiki_button = ('XPATH', "//div[@class='create-btn']") #新增词条 new_entry_button = ('XPATH', '//*[@id="app"]/div[1]/div[2]/div/div/div[1]/div[2]/div[1]/div[2]/div[2]') #知识反馈 feedback_button = ('XPATH', '//*[@id="app"]/div[1]/div[2]/div/div/div[1]/div[2]/div[1]/div[2]/div[3]') #点击【新增知识点】 def click_new_knowledge(self): self.click(self.new_wiki_button) #点击【新增词条】 def click_new_entry(self): self.click(self.new_entry_button) #点击【知识反馈】 def click_feedback(self): self.click(self.feedback_button)

"""百科模块"""import unittestfrom time import sleepfrom selenium import webdriverfrom Common.basePage import basePagefrom PageObject import wiki_home_pagefrom PageObject.customer_login import CustomerLoginfrom PageObject.edit_kn_page import EditKnPagefrom PageObject.home_page import HomePagefrom PageObject.wiki_home_page import WikiHomePageclass Login1(unittest.TestCase): @classmethod def setUpClass(cls) -> None: cls.driver =webdriver.Chrome() cls.lp = CustomerLogin(cls.driver) cls.hp = HomePage(cls.driver) cls.wkp = WikiHomePage(cls.driver) cls.knp =EditKnPage(cls.driver) @classmethod def tearDownClass(cls) -> None: cls.driver.quit() pass #跳转到百科首页 def test_01_goto_wiki(self): self.lp.visit('https://v5-test.faqrobot.cn/webaikn/#/login') self.lp.customerLogin() self.hp.jump_wiki() print('跳转到百科首页成功') # 新增知识点,正常情况 def test_02_new_wiki_point(self): self.wkp.click_new_knowledge() self.wkp.switch_window() sleep(3) self.knp.type_kn_title() self.knp.choose_classification() self.knp.choose_apply() self.knp.open_to_fields() self.knp.expire_to_look() self.knp.add_answers() self.driver.execute_script("window.scrollTo(0,0)") self.knp.belong_entry() # 跳入第1个富文本框 self.driver.switch_to.frame("ueditor_0") self.knp.type(('xpath', "/html/body"), "自动化测试:python") self.driver.switch_to.default_content() # 跳入第2个富文本框 self.driver.execute_script("window.scrollTo(0,600)") self.driver.switch_to.frame("ueditor_1") self.knp.type(('xpath', "/html/body"), "自动化测试:java") self.driver.switch_to.default_content() self.driver.execute_script("window.scrollTo(0,800)") sleep(5) self.knp.submit_kn()

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。