基于python语言下的UI自动化测试框架搭建
Posted yk617558302
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于python语言下的UI自动化测试框架搭建相关的知识,希望对你有一定的参考价值。
framework包中文件如下所示:
base_page.py:常用操作方法
在framework包下创建base_page.py文件,文件中封装一些页面常用操作方法,可以自己在这个类中进行对应方法的添加,代码如下:
1 # coding=utf-8
2 import time
3 from selenium.common.exceptions import NoSuchElementException
4 import os.path
5 from framework.logger import Logger
6
7 # create a logger instance
8 logger = Logger(logger="BasePage").getlog()
9
10
11 class BasePage(object):
12 """
13 定义一个页面基类,让所有页面都继承这个类,封装一些常用的页面操作方法到这个类
14 """
15
16 def __init__(self, driver):
17 self.driver = driver
18
19 # quit browser and end testing
20 def quit_browser(self):
21 self.driver.quit()
22
23 # 浏览器前进操作
24 def forward(self):
25 self.driver.forward()
26 logger.info("Click forward on current page.")
27
28 # 浏览器后退操作
29 def back(self):
30 self.driver.back()
31 logger.info("Click back on current page.")
32
33 # 隐式等待
34 def wait(self, seconds):
35 self.driver.implicitly_wait(seconds)
36 logger.info("wait for %d seconds." % seconds)
37
38 # 点击关闭当前窗口
39 def close(self):
40 try:
41 self.driver.close()
42 logger.info("Closing and quit the browser.")
43 except NameError as e:
44 logger.error("Failed to quit the browser with %s" % e)
45
46 # 保存图片
47 def get_windows_img(self):
48 """
49 在这里我们把file_path这个参数写死,直接保存到我们项目根目录的一个文件夹.\\Screenshots下
50 """
51 file_path = os.path.dirname(os.path.abspath(‘.‘)) + ‘\\screenshots\\\\‘
52 rq = time.strftime(‘%Y%m%d%H%M%S‘, time.localtime(time.time()))
53 screen_name = file_path + rq + ‘.png‘
54 try:
55 self.driver.get_screenshot_as_file(screen_name)
56 logger.info("Had take screenshot and save to folder : \\screenshots")
57 except NameError as e:
58 logger.error("Failed to take screenshot! %s" % e)
59 self.get_windows_img()
60
61 # 定位元素方法
62 def find_element(self, selector):
63 """
64 这个地方为什么是根据=>来切割字符串,请看页面里定位元素的方法
65 submit_btn = "id=>su"
66 login_lnk = "xpath => //*[@id=‘u1‘]/a[7]" # 百度首页登录链接定位
67 如果采用等号,结果很多xpath表达式中包含一个=,这样会造成切割不准确,影响元素定位
68 :param selector:
69 :return: element
70 """
71 element = ‘‘
72 if ‘=>‘ not in selector:
73 return self.driver.find_element_by_id(selector)
74 selector_by = selector.split(‘=>‘)[0]
75 selector_value = selector.split(‘=>‘)[1]
76
77 if selector_by == "i" or selector_by == ‘id‘:
78 try:
79 element = self.driver.find_element_by_id(selector_value)
80 logger.info("Had find the element \\‘ %s \\‘ successful "
81 "by %s via value: %s " % (element.text, selector_by, selector_value))
82 except NoSuchElementException as e:
83 logger.error("NoSuchElementException: %s" %