51Testing软件测试论坛

标题: UI 自动化高亮元素与截图小工具 [打印本页]

作者: 巴黎的灯光下    时间: 2017-6-28 12:09
标题: UI 自动化高亮元素与截图小工具
做UI自动化时,写了2个方法,方便清晰辨识定位的元素and 保留定位证据,与大家分享下。

高亮元素
  1. def highlight(func):

  2.     def apply_style(element):
  3.                 # 实现的方式很简单,就是定位到元素后,执行js样式
  4.         driver.execute_script("arguments[0].style.border='6px solid red'", element)

  5.     @wraps(func)
  6.     def wrapper(self, *args, **kwargs):
  7.         element = func(self, *args, **kwargs)
  8.         apply_style(element)
  9.         return element

  10.     return wrapper
复制代码
截图定位的元素
  1. def screenshot(func):

  2.     def screen_shot(screen_name):
  3.         driver.save_screenshot(screen_name)

  4.     @wraps(func)
  5.     def wrapper(self, *args, **kwargs):
  6.         element = func(self, *args, **kwargs)

  7.         screen_shot(str(args[-1]) + '.jpg') # 默认是以定位元素属性为文件名
  8.         return element


  9.     return wrapper
复制代码
使用
  1. class Action(object):
  2.     def __init__(self, driver):
  3.         self.driver = driver

  4.     @screenshot
  5.     @highlight
  6.     def find_element(self, *loc):
  7.         try:
  8.             WebDriverWait(self.driver, 15).until(lambda driver: driver.find_element(*loc).is_displayed())
  9.             return self.driver.find_element(*loc)
  10.         except Exception as e:
  11.             return e
复制代码

测试(体现百度价值的时候到了.)
  1. driver = webdriver.Chrome()

  2. driver.get('http://www.baidu.com')

  3. action = Action(driver)

  4. action.find_element(By.ID, 'su')
  5. time.sleep(3)
  6. driver.quit()
复制代码
效果图(su.jpg)

如果没封装一层定位方法,可以使用如下方式,稍微和上面有些不同,该方法会在定位前后截图,可以用来对比。
  1. def highlight(element, element_name=None, debug=True):
  2.         '''
  3.         debug 参数用来开关截图功能
  4.         '''
  5.     # 高亮元素
  6.     def apply_style():
  7.         driver.execute_script("arguments[0].style.border='6px solid red'", element)

  8.     # 截图
  9.     def screen_shot(screen_name):
  10.         driver.save_screenshot(screen_name)

  11.     if debug:
  12.         try:
  13.             screen_shot(str(element_name) + '_before.jpg')
  14.             apply_style()
  15.             screen_shot(str(element_name) + '_after.jpg')
  16.         except Exception as e:
  17.             return e

  18.     apply_style()

  19. #  使用也很简单
  20. element = driver.find_element(By.ID, 'kw')
  21. highlight(element, 'kw')
复制代码
还有可以改进的地方,就这些,希望对你有帮助。O(∩_∩)O


作者: 草帽路飞UU    时间: 2017-6-28 16:06
谢谢分享,特别是高亮元素那里
作者: 乐哈哈yoyo    时间: 2017-6-28 16:06
优秀就来自于每一天的改进和创新,值得鼓励和肯定
作者: 八戒你干嘛    时间: 2017-6-28 16:07
实际测试中应该是要能高亮定位失败的元素才真的有用吧,既然元素已经定位到高亮有何意义呢




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2