当前位置:   article > 正文

Python WEB UI自动化测试(2)-web自动化核心操作设计及封装_ui自动化浏览器操作封装

ui自动化浏览器操作封装

一.POM设计模式

pom指的是page object module,po模式,也就是说会把每个页面当做一个对象来对待,而该页面下的动作都会封装在这个对象中。通过组装页面对象的操作来完成业务的封装。在编写测试用例时调用对应的业务完成测试即可。

二.搭建web框架结构

主要是围绕po模式来搭建结构

pages: 这是一个package,主要用来管理和存放页面对象的封装

actions:这是一个package,主要用来管理和存放业务的封装

testcases:这是一个package,主要用来管理和存放测试用例的封装

common: 这是一个package,主要用来管理和存放底层代码,比如driver的封装、日志封装、文

件封装

logs: 这是一个目录,存放日志文件的

data: 这是一个目录,存放测试数据的

report: 这是一个目录,存放测试结果以及测试报告

video:这是一个目录,是测试过程中临时存放截图的

confifig: 这是一个目录,管理和存放配置信息

conftest.py: 主要是用例重写pytest的一些钩子函数的,以及自定义的fifixture函数

pytest.ini: pytest的基本配置文件

run.py: 整体框架的执行入口

get_project_path.py:主要是提供当前项目的目录路径

三.web自动化核心操作设计及封装

对于web自动来说driver对象是非常重要的,包括元素定位、点击、输入等等基本的操作,在这个框架都是核心的底层代码,因此我们首先需要封装这部分。在common目录下创建一个driver.py,在

driver.py中封装核心动作。

  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. from selenium.webdriver.support import expected_conditions
  4. from selenium.webdriver.support.wait import WebDriverWait
  5. class InitDriver:
  6. def __init__(self,browser='chrome'):
  7. self.browser = browser.lower()
  8. if self.browser == 'chrome':
  9. self.driver = webdriver.Chrome()
  10. elif self.browser == 'firefox':
  11. self.driver = webdriver.Firefox()
  12. elif self.driver =='ie':
  13. self.driver = webdriver.Ie()
  14. elif self.browser == 'edge':
  15. self.driver = webdriver.Edge()
  16. elif self.browser =='safari':
  17. self.driver = webdriver.Safari()
  18. else:
  19. raise BaseException(f'不支持{self.browser}浏览器')
  20. #窗口最大化
  21. self.driver.maximize_window()
  22. # 隐式等待
  23. self.driver.implicitly_wait(10)
  24. #请求网址封装
  25. def get(self,url):
  26. self.driver.get(url)
  27. #封装find_element(),里面需要的(传参定位元素的方法,和定位元素的表达式)
  28. def get_by(self,ele_info):
  29. type = ele_info['type']
  30. value = ele_info['value']
  31. if type == 'id':
  32. locator = (By.ID, value)
  33. elif type == 'name':
  34. locator = (By.NAME, value)
  35. elif type == 'classname':
  36. locator = (By.CLASS_NAME, value)
  37. elif type == 'tagname':
  38. locator = (By.TAG_NAME, value)
  39. elif type == 'linktext':
  40. locator = (By.LINK_TEXT, value)
  41. elif type == 'partiallinktext':
  42. locator = (By.PARTIAL_LINK_TEXT, value)
  43. elif type == 'css':
  44. locator = (By.CSS_SELECTOR, value)
  45. elif type == 'xpath':
  46. locator = (By.XPATH, value)
  47. else:
  48. raise BaseException(f'定位的类型【{type}】不支持')
  49. return locator
  50. #定位单元素
  51. def find_element(self,ele_info):
  52. name = ele_info['name']
  53. type = ele_info['type'].lower()
  54. value = ele_info['value']
  55. timeout = ele_info['timeout']
  56. # 获取定位元素的方式和表达式
  57. locator = self.get_by(ele_info)
  58. # 显示等待,返回元素的值
  59. try:
  60. wait = WebDriverWait(driver=self.driver,timeout=timeout)
  61. element = wait.until(expected_conditions.presence_of_element_located(locator))
  62. except BaseException as e:
  63. raise BaseException(f'定位元素【{name}】,通过【{type}】方式,值是【{value}】,未定位到!')
  64. return element
  65. #定位多个元素
  66. def find_elements(self,ele_info):
  67. name = ele_info['name']
  68. type = ele_info['type'].lower()
  69. value = ele_info['value']
  70. timeout = ele_info['timeout']
  71. # 获取定位元素的方式和表达式
  72. locator = self.get_by(ele_info)
  73. # 显示等待,返回元素的值列表
  74. try:
  75. wait = WebDriverWait(driver=self.driver,timeout=timeout)
  76. ele_list = wait.until(expected_conditions.presence_of_all_elements_located(locator))
  77. except BaseException as e:
  78. raise BaseException(f'定位元素【{name}】,通过【{type}】方式,值是【{value}】,未定位到!')
  79. return ele_list
  80. #封装点击方法
  81. def click(self,ele_info):
  82. name = ele_info['name']
  83. type = ele_info['type'].lower()
  84. value = ele_info['value']
  85. timeout = ele_info['timeout']
  86. # 获取定位元素的方式和表达式
  87. locator = self.get_by(ele_info)
  88. try:
  89. wait = WebDriverWait(driver=self.driver,timeout=timeout)
  90. wait.until(element_click_success(locator))
  91. except BaseException as e:
  92. raise BaseException(f'定位元素【{name}】,通过【{type}】方式,值是【{value}】,未定位到!')
  93. #封装给输入框填充值的方法
  94. def send_keys(self,ele_info,text):
  95. element = self.find_element(ele_info)
  96. element.send_keys(text)
  97. #自己重写定义点击成功的方法
  98. class element_click_success(object):
  99. def __init__(self, locator):
  100. self.locator = locator
  101. def __call__(self, driver):
  102. try:
  103. element = driver.find_element(*self.locator)
  104. element.click()
  105. return element
  106. except:
  107. print('点击异常,继续轮休!')
  108. return False
  109. if __name__ == '__main__':
  110. driver = InitDriver()
  111. driver.get('https://blog.csdn.net/')
  112. ele_list= {"name":"搜索框","type":"id","value":"toolbar-search-input","timeout":5}
  113. driver.send_keys(ele_list,'Yasar.l')
  114. ele_list = {"name": "搜索按钮", "type": "id", "value": "toolbar-search-button", "timeout": 5}
  115. driver.click(ele_list)

四.POM模式脚本编写

登录page

  1. from common.driver import InitDriver
  2. class LoginPage:
  3. def __init__(self, driver: InitDriver):
  4. self.driver = driver
  5. def send_keys_username(self):
  6. ele_list = {"name": "用户名输入框", "type": "name", "value": "username", "timeout": 5}
  7. self.driver.send_keys(ele_list, 'h2901')
  8. def send_keys_password(self):
  9. ele_list = {"name": "密码输入框", "type": "name", "value": "password","timeout":5}
  10. self.driver.send_keys(ele_list,'E3s-uat2021!#')
  11. def click_login_button(self):
  12. ele_list = {"name": "登录按钮", "type": "xpath", "value": "//span[text()='登录']","timeout":5}
  13. self.driver.click(ele_list)
  14. if __name__ == '__main__':
  15. loginPage = LoginPage(InitDriver())
  16. loginPage.driver.get('https://XXXXXXXXXXXX.com/#/login')
  17. loginPage.send_keys_username()
  18. loginPage.send_keys_password()
  19. loginPage.click_login_button()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/94307
推荐阅读
相关标签
  

闽ICP备14008679号