51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1762|回复: 5
打印 上一主题 下一主题

[原创] UI 自动化高亮元素与截图小工具

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2017-6-28 12:09:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
做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

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2017-6-28 16:06:17 | 只看该作者
谢谢分享,特别是高亮元素那里
回复 支持 反对

使用道具 举报

  • TA的每日心情
    无聊
    2024-7-12 13:16
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    3#
    发表于 2017-6-28 16:06:42 | 只看该作者
    优秀就来自于每一天的改进和创新,值得鼓励和肯定
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    前天 09:07
  • 签到天数: 11 天

    连续签到: 2 天

    [LV.3]测试连长

    4#
    发表于 2017-6-28 16:07:31 | 只看该作者
    实际测试中应该是要能高亮定位失败的元素才真的有用吧,既然元素已经定位到高亮有何意义呢
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-9-21 05:46 , Processed in 0.061957 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表