zoukankan      html  css  js  c++  java
  • Airtest 解决图像识别位置与实际点击位置不一致的问题

    之前用Airtest_Selenium做Web自动化测试,一直很顺利。直到遇到一个导出数据的功能:这个功能会将数据导出生成一个excel文件,显示在窗口的下部,然后继续执行脚本的时候会出现一个奇怪的现象,从日志截图看识别到的元素位置是没问题的,但是实际点击的位置却向下偏移了一些,几次尝试发现原来是这个下载框搞的鬼。

     
     
     

    我首先尝试了使用Airtest自带的图像识别功能尝试对这个下载对话框进行操作,结果运行时报错:找不到该元素。

     

    和群里的朋友讨论,原来Airtest在做PC端的web测试时使用的也是selenium的框架,而这个下载框不属于浏览器的组件,所以Airtest也没法对它进行操作。于是我Google了一番,发现Selenium其实是有对键盘的操作的,比如
    from selenium.webdriver.common.keys import Keys
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')

    但是实际尝试时发现这个操作需要基于一个element来进行,而我当前的页面又没有一个合适的element满足条件,导致实际运行要么提示该element没有指定的attribute,或者干脆没有任何效果,这条路也走不通。

    后来我继续Google以及和群里的同学讨论研究,终于发现了一个库来解决这个问题:就是pynput。

    安装非常简单,pip install pynput直接搞定,可能还需要额外安装一个pywin32,毕竟是要操作windows键盘鼠标来的。

    这个场景下我只需要做两个键盘操作:首先按组合键Ctrl+J打开下载列表,然后再按Ctrl+W关闭打开的下载列表tab页,这样就自动回到了之前的主页,下面也不会有这个下载框了。需要注意的一点是,pynput对键盘的操作分为press和release两步,千万不要忘了release操作,否则忙乎半天出了错还是一头雾水。代码实例如下:

    from pynput.keyboard import Controller as Keyboard
    def export_handler():
    with keyboard.pressed(Key.ctrl):
    #通过快捷键Ctrl+J打开下载详清tab,再按Ctrl+W关闭该tab
    keyboard.press('j')
    keyboard.release('j')
    sleep(3.0)
    keyboard.press('w')
    keyboard.release(Key.ctrl)
    keyboard.release('w')

    深夜发稿,拖了两天的锅。代码写的很low,见笑。以上就是我处理web自动化遇到的一个小坑的过程,也希望Airtest的同学能够把这块的支持加进去,让产品越做越好。https://github.com/AirtestProject/Airtest/issues/406

  • 相关阅读:
    c++中sort()及qsort()的用法总结
    POJ的层次感分类
    DFS练习-HDU1010
    Dijkstra&&Floyd
    DFS练习一---HDU 1342
    快速幂取模算法
    树的实现
    C++的队列和pair
    BFS练习-POJ.2386
    Codeforces 1139E(二分图最大匹配)
  • 原文地址:https://www.cnblogs.com/mgtester/p/10905403.html
Copyright © 2011-2022 走看看