Flybirds - BDD-driven natural language automated testing framework, present by Trip Flight

Overview

Flybird | English Version

行为驱动开发(Behavior-driven development,缩写BDD),是一种软件过程的思想或者方法,是一种敏捷软件开发的技术.

Flybird是基于BDD模式的前端UI自动化测试框架,提供了一系列开箱即用的工具和完善的文档。

  • 基于Behave,实现BDD中“自然语言测试用例文档”和“自动化测试代码”关联需要用到支持BDD工具。
  • 基于Airtest,实现BDD中“测试用例能在自动化测试平台上执行”需要用到UI自动化测试框架。

特性

使用Flybird你能够完成大部分的手机端自动化操作,以下是一些帮助入门的特性描述:

  • 基于BDD模式,类自然语言语法
  • 支持自动化APP操作、表单提交、UI元素校验、键盘输入、Deeplink跳转等
  • 默认支持英文、中文两种语言,支持更多语言扩展
  • 插件式设计,支持用户自定义自动化扩展
  • 提供cli脚手架,快速搭建项目
  • 提供html报告

环境要求

  • python(3.7-3.9)
  • nodejs(12+)

快速开始

1. 环境搭建

使用pip安装flybird框架,过程中会自动安装所需的 依赖包

pip install flybird

在Mac/Linux系统下,需要手动赋予adb可执行权限

  • for mac
cd {your_python_path}/site-packages/airtest/core/android/static/adb/mac
chmod +x adb
  • for linux
cd {your_python_path}/site-packages/airtest/core/android/static/adb/linux
chmod +x adb

使用脚手架创建项目

flybird create 

创建过程中会提示输入以下信息

  • 项目名称
  • 测试平台:Android / iOS
  • 测试设备名称( 可跳过,后续可在config中配置deviceId节点 )
  • webDriverAgent的BundleID( 可跳过,ios设备连接使用,后续可在config中配置webDriverAgent节点 )
  • APP测试包名称(可跳过,默认为ctrip演示包,后续可在config中配置packageName节点)

为了帮助使用,项目创建时,会在test目录下生成演示features,后续可自行删除

2. 测试执行

  1. 请确保配置的测试设备能够正常连接

    • Android: 执行命令 adb devices , 检查设备列表中是否包含测试设备
    • iOS:以tidevice库举例,执行命令 tidevice list,检查设备列表中是否包含测试设备

    Android设备连接 Q&A

    • 请先安装手机对应品牌的官方驱动,确保能使用电脑对手机进行USB调试
    • 确保已经打开了手机中的"开发者选项",并且打开"开发者选项"内的"允许USB调试"
    • 部分手机需要打开"允许模拟位置"、"允许通过USB安装应用"
    • 关闭电脑上已经安装的手机助手软件,能避免绝大多数问题,请务必在任务管理器中手工结束手机助手进程

    iOS设备连接 Q&A

    • 请先准备一台macOS ,使用xcode部署 iOS-Tagent 成功后,能够在mac或windows机器上连接到iOS手机。请点击链接下载项目代码到本地进行部署。
    • mac 环境通过 Homebrew 安装iproxy brew install libimobiledevice
    • windows 环境安装itunes
  2. 下载安装测试包

    • Android:框架会通过config中配置的packagePath自动下载测试包并安装(请确保手机已经打开”允许安装未知来源“ )。也可手动下载安装:下载地址
    • iOS:
      1. 请手动下载演示APP进行安装:下载地址
      2. 开启wdaproxy: shell tidevice --udid $udid wdaproxy -B $web_driver_angnt_bundle_id -p $port
  3. 运行测试,默认运行features目录下所有文件

flybird run 
  • 演示feature中包含了主要的自动化语法,为了让演示正常运行,建议不要修改配置项packageNamepackagePath。如无需演示,可自行修改

  • 更多执行参数说明 :项目脚手架

  • 更多演示项目说明 : 项目结构

  • 更多Feature编写说明 :Feature编写

3. 项目结构

4. Feature编写

5. 项目脚手架

贡献

  1. Fork 仓库
  2. 创建分支 (git checkout -b my-new-feature)
  3. 提交修改 (git commit -am 'Add some feature')
  4. 推送 (git push origin my-new-feature)
  5. 创建 PR

欢迎 fork 和反馈

如有建议或意见,欢迎在 github issues 区提问

协议

本仓库遵循 MIT 协议

致谢

感谢以下仓库让Flybird变得更好:

Comments
  • flybirds create  flybirds run -P features/test/web

    flybirds create flybirds run -P features/test/web

    问题描述 / Describe the bug A clear and concise description of what the bug is.

    问题复现步骤 / To Reproduce

    1. Go to '...'
    2. Click on '....'
    3. Scroll down to '....'
    4. See error

    预期结果 / Expected behavior A clear and concise description of what you expected to happen.

    截图 / Screenshots If applicable, add screenshots to help explain your problem.

    环境信息 / Environment (please complete the following information):

    • Device: [e.g. iPhone6]
    • OS: [e.g. iOS8.1]
    • Browser [e.g. stock browser, safari]
    • Version [e.g. 22]

    Additional context Add any other context about the problem here.

    我先执行了 $ flybirds run -P features/test/android 由于我模拟器没配置好,提示有问题, 我想直接试下web好了 先playwright install了各种浏览器

    $ flybirds run -P features/test/web
    2022-05-22 00:10:00,501 - flybirds_log - INFO - flybirds cmd info: features/test/web None --format=json report\24663315-63d7-40da-b16a-c309866701d0\report.json () True None True local
    2022-05-22 00:10:00,502 - flybirds_log - INFO - report path: -o report\24663315-63d7-40da-b16a-c309866701d0\report.json
    2022-05-22 00:10:00,504 - flybirds_log - INFO - screenshot path: report\24663315-63d7-40da-b16a-c309866701d0\screenshot
    2022-05-22 00:10:00,504 - flybirds_log - INFO - the assembled behave execution command: behave features/test/web --format=json -o report\24663315-63d7-40da-b16a-c309866701d0\report.json --define screenShotDir=cmVwb3J0XDI0NjYzMzE1LTYzZDctNDBkYS1iMTZhLWMzMDk4NjY3MDFkMFxzY3JlZW5zaG90 --define run_at=bG9jYWw= --no-color --no-capture --no-capture-stderr  
    2022-05-22 00:10:00,504 - flybirds_log - INFO - ============last run_args: {'cmd_str': 'behave features/test/web --format=json -o report\\24663315-63d7-40da-b16a-c309866701d0\\report.json --define screenShotDir=cmVwb3J0XDI0NjYzMzE1LTYzZDctNDBkYS1iMTZhLWMzMDk4NjY3MDFkMFxzY3JlZW5zaG90 --define run_at=bG9jYWw= --no-color --no-capture --no-capture-stderr', 'need_rerun': True, 'report_dir_path': 'report\\24663315-63d7-40da-b16a-c309866701d0', 'use_define': ['--define', 'screenShotDir=cmVwb3J0XDI0NjYzMzE1LTYzZDctNDBkYS1iMTZhLWMzMDk4NjY3MDFkMFxzY3JlZW5zaG90', '--define', 'run_at=bG9jYWw='], 'env_config': None, 'report_format': '--format=json', 'html': True, 'run_at': 'local', 'processes': 4, 'feature_path': 'features/test/web', 'parsed_tags': []}
    2022-05-22 00:10:00,505 - flybirds_log - INFO - received run_args: {'cmd_str': 'behave features/test/web --format=json -o report\\24663315-63d7-40da-b16a-c309866701d0\\report.json --define screenShotDir=cmVwb3J0XDI0NjYzMzE1LTYzZDctNDBkYS1iMTZhLWMzMDk4NjY3MDFkMFxzY3JlZW5zaG90 --define run_at=bG9jYWw= --no-color --no-capture --no-capture-stderr', 'need_rerun': True, 'report_dir_path': 'report\\24663315-63d7-40da-b16a-c309866701d0', 'use_define': ['--define', 'screenShotDir=cmVwb3J0XDI0NjYzMzE1LTYzZDctNDBkYS1iMTZhLWMzMDk4NjY3MDFkMFxzY3JlZW5zaG90', '--define', 'run_at=bG9jYWw='], 'env_config': None, 'report_format': '--format=json', 'html': True, 'run_at': 'local', 'processes': 4, 'feature_path': 'features/test/web', 'parsed_tags': []}
    2022-05-22 00:10:00,514 - flybirds_log - INFO - find extend pkg
    2022-05-22 00:10:00,549 - flybirds_log - INFO - use_define: ['--define', 'screenShotDir=cmVwb3J0XDI0NjYzMzE1LTYzZDctNDBkYS1iMTZhLWMzMDk4NjY3MDFkMFxzY3JlZW5zaG90', '--define', 'run_at=bG9jYWw=']
    2022-05-22 00:10:00,931 - flybirds_log - INFO - change behave json format feature to flybirds feature
    2022-05-22 00:10:00,932 - flybirds_log - INFO - change behave add_step_definition to flybirds add_step_definition
    2022-05-22 00:10:00,979 - flybirds_log - INFO - [before_all_hook] user_data:{'screenShotDir': 'cmVwb3J0XDI0NjYzMzE1LTYzZDctNDBkYS1iMTZhLWMzMDk4NjY3MDFkMFxzY3JlZW5zaG90', 'run_at': 'bG9jYWw='}
    2022-05-22 00:10:00,980 - flybirds_log - INFO - [loader] user_data: {'screenShotDir': 'report\\24663315-63d7-40da-b16a-c309866701d0\\screenshot', 'run_at': 'local'}
    2022-05-22 00:10:00,981 - flybirds_log - INFO - [loader] run platform: android
    2022-05-22 00:10:01,336 - flybirds_log - INFO - start on before hook
    2022-05-22 00:10:01,337 - flybirds_log - INFO - [event config] user_data: {'screenShotDir': 'report\\24663315-63d7-40da-b16a-c309866701d0\\screenshot', 'run_at': 'local'}      
    2022-05-22 00:10:01,337 - flybirds_log - INFO - user data,count:2
    2022-05-22 00:10:01,338 - flybirds_log - INFO - run_config
    2022-05-22 00:10:01,338 - flybirds_log - INFO - {'is_rerun': False, 'run_at': 'local'}  
    2022-05-22 00:10:01,339 - flybirds_log - INFO - Logging configuration information       
    2022-05-22 00:10:01,339 - flybirds_log - INFO - {'level': 'info'}
    2022-05-22 00:10:01,340 - flybirds_log - INFO - APP configuration information
    2022-05-22 00:10:01,340 - flybirds_log - INFO - {'package_name': 'ctrip.android.view', 'unique_tag': '', 'default_user': None, 'default_password': None, 'user_group': 1, 'package_path': 'https://download2.ctrip.com/html5/Ctrip_V8.43.0_SIT4-100053_Product_9725895.apk', 'overwrite_installation': False, 'run_id': None, 'build_id': None, 'pkg_version': None}
    2022-05-22 00:10:01,341 - flybirds_log - INFO - Device configuration information        
    2022-05-22 00:10:01,341 - flybirds_log - INFO - {'device_id': '127.0.0.1:62001', 'platform': 'android', 'web_driver_agent': 'com.fd.test.WebDriverAgentLib.xctrunner', 'screen_size': None}
    2022-05-22 00:10:01,342 - flybirds_log - INFO - Web configuration information
    2022-05-22 00:10:01,343 - flybirds_log - INFO - {'headless': False, 'browser_type': ['chromium'], 'default_time_out': 30}
    2022-05-22 00:10:01,343 - flybirds_log - INFO - Frame parameter configuration information
    2022-05-22 00:10:01,344 - flybirds_log - INFO - {'wait_ele_timeout': 35, 'wait_ele_disappear': 10, 'click_verify_timeout': 15, 'use_swipe_duration': False, 'swipe_duration': 6, 'use_poco_input': True, 'after_input_wait': 1, 'use_search_swipe_duration': False, 'search_swipe_duration': 1, 'swipe_search_count': 5, 'swipe_search_distance': 0.3, 'page_render_timeout': 65, 'app_start_time': 6, 'swipe_ready_time': 3, 'verify_pos_not_change_count': 5, 'screen_record_time': 90, 'use_snap': True, 'use_airtest_record': False}        
    2022-05-22 00:10:01,345 - flybirds_log - INFO - Test report configuration information   
    2022-05-22 00:10:01,345 - flybirds_log - INFO - {'screen_shot_dir': 'report\\24663315-63d7-40da-b16a-c309866701d0\\screenshot'}
    2022-05-22 00:10:01,345 - flybirds_log - INFO - Process control configuration information
    2022-05-22 00:10:01,345 - flybirds_log - INFO - {'before_run_page': 'restartApp', 'scenario_fail_page': 'restartApp', 'scenario_success_page': 'None', 'before_run_login': False, 'fail_screen_record': True, 'scenario_screen_record_time': 120, 'fail_rerun': False, 'max_fail_rerun_count': 1.0, 'max_retry_count': 1}
    2022-05-22 00:10:01,347 - flybirds_log - INFO - configuration file read completed       
    2022-05-22 00:10:01,348 - flybirds_log - INFO - Logging configuration information       
    2022-05-22 00:10:01,348 - flybirds_log - INFO - {'level': 'info'}
    2022-05-22 00:10:01,353 - flybirds_log - INFO - the python script in the project is read
    
    2022-05-22 00:10:01,353 - flybirds_log - INFO - [active_before_all] user_data:{'screenShotDir': 'report\\24663315-63d7-40da-b16a-c309866701d0\\screenshot', 'run_at': 'local'}  
    2022-05-22 00:10:01,353 - flybirds_log - INFO - default_active_tag_provider :android chromium
    2022-05-22 00:10:01,354 - flybirds_log - INFO - [active_before_all] active_tag_provider:{'python2': 'false', 'python3': 'true', 'os': 'win32', 'platform': 'android', 'deviceType': 'ivd', 'cur_browser': 'chromium'}
    2022-05-22 00:10:01,354 - flybirds_log - INFO - device prepare
    2022-05-22 00:10:01,354 - flybirds_log - INFO - device_id information:127.0.0.1:62001   
    [00:10:01][DEBUG]<airtest.core.android.adb> D:\Programs\anaconda\envs\dev\Lib\site-packages\airtest\core\android\static\adb\windows\adb.exe -s 127.0.0.1:62001 get-state        
    [00:10:01][DEBUG]<airtest.core.android.adb> D:\Programs\anaconda\envs\dev\Lib\site-packages\airtest\core\android\static\adb\windows\adb.exe -s 127.0.0.1:62001 wait-for-device  
    [00:10:01][DEBUG]<airtest.core.android.adb> D:\Programs\anaconda\envs\dev\Lib\site-packages\airtest\core\android\static\adb\windows\adb.exe -s 127.0.0.1:62001 shell getprop ro.build.version.sdk
    2022-05-22 00:10:01,500 - flybirds_log - INFO - device connect info:<airtest.core.android.android.Android object at 0x0000024BA01731F0>
    2022-05-22 00:10:01,501 - flybirds_log - INFO - initialize the device complete:127.0.0.1:62001
    [00:10:01][DEBUG]<airtest.core.android.adb> D:\Programs\anaconda\envs\dev\Lib\site-packages\airtest\core\android\static\adb\windows\adb.exe -s 127.0.0.1:62001 shell pm list packages
    2022-05-22 00:10:02,016 - flybirds_log - INFO - install app start, path:D:\Download\audio-visual\saas\data\indiehackerebooks\indie\download\installer.apk
    [00:10:02][DEBUG]<airtest.core.android.adb> D:\Programs\anaconda\envs\dev\Lib\site-packages\airtest\core\android\static\adb\windows\adb.exe -s 127.0.0.1:62001 install D:\Download\audio-visual\saas\data\indiehackerebooks\indie\download\installer.apk
    2022-05-22 00:10:09,021 - flybirds_log - INFO - fail to install app
    HOOK-ERROR in before_all: Exception: Traceback (most recent call last):
      File "D:\Programs\anaconda\envs\dev\lib\site-packages\flybirds\core\plugin/event\app_prepare.py", line 102, in run
        app.install_app(installer)
      File "D:\Programs\anaconda\envs\dev\lib\site-packages\flybirds\core\driver\app.py", line 43, in install_app
        return g_context.app.install_app(package_path, wait_time)
      File "D:\Programs\anaconda\envs\dev\lib\site-packages\flybirds\core\plugin\plugins/default/android\app.py", line 40, in install_app
        i_result = install(package_path)
      File "D:\Programs\anaconda\envs\dev\lib\site-packages\airtest\utils\logwraper.py", line 90, in wrapper
        res = f(*args, **kwargs)
      File "D:\Programs\anaconda\envs\dev\lib\site-packages\airtest\core\api.py", line 229, in install
        return G.DEVICE.install_app(filepath, **kwargs)
      File "D:\Programs\anaconda\envs\dev\lib\site-packages\airtest\core\android\android.py", line 363, in install_app
        return self.adb.install_app(filepath, replace=replace, install_options=install_options)
      File "D:\Programs\anaconda\envs\dev\lib\site-packages\airtest\core\android\adb.py", line 584, in install_app
        out = self.cmd(cmds)
      File "D:\Programs\anaconda\envs\dev\lib\site-packages\airtest\core\android\adb.py", line 197, in cmd
        raise AdbError(stdout, stderr)
    airtest.core.error.AdbError: stdout[] stderr[adb: failed to install D:\Download\audio-visual\saas\data\indiehackerebooks\indie\download\installer.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113]
    ]
    
    ABORTED: By user.
    0 features passed, 0 failed, 0 skipped, 16 untested
    0 scenarios passed, 0 failed, 0 skipped, 30 untested
    0 steps passed, 0 failed, 0 skipped, 0 undefined, 132 untested
    Took 0m0.000s
    2022-05-22 00:10:09,104 - flybirds_log - INFO - Feature sum_count rerun after creation failure <= 0 or fail_count <= 0
    2022-05-22 00:10:09,104 - flybirds_log - INFO - True
    2022-05-22 00:10:09,110 - flybirds_log - INFO - Do you need to rerun the task: False, the failed retry task was not executed
    2022-05-22 00:10:09,110 - flybirds_log - INFO - Start processing the json report. report_dir_path: [report\24663315-63d7-40da-b16a-c309866701d0],rerun_report_dir_path:[None]   
    2022-05-22 00:10:09,112 - flybirds_log - INFO - start generate report
    2022-05-22 00:10:09,112 - flybirds_log - INFO - report cmd:node D:\Programs\anaconda\envs\dev\lib\site-packages\flybirds\report\node_report\report.js report\24663315-63d7-40da-b16a-c309866701d0 report\24663315-63d7-40da-b16a-c309866701d0 android
    multiple-cucumber-html-reporter platform: android
    
    
    opened by shopconan 21
  • screenshot step cannot cap image

    screenshot step cannot cap image

    问题描述 / Describe the bug screenshot step succeed, but no image can be found. Also the time of screenshot in report shows 00:00:00.000

    问题复现步骤 / To Reproduce

    1. use Background with more than 2 steps
    2. screenshot in Scenario
    3. find screenshot

    预期结果 / Expected behavior image should be found

    截图 / Screenshots 111

    环境信息 / Environment (please complete the following information):

    • Device: [Pixel 4A]
    • OS: [Android 12]

    Additional context

    opened by andychan06 14
  • 运行 web的demo用例,报错

    运行 web的demo用例,报错

    问题描述 / Describe the bug A clear and concise description of what the bug is.

    问题复现步骤 / To Reproduce 1.(venv) PS E:\chase_code\AutoTest_PC\gsol_-pc_-auto-test> flybirds run -D platform=web -P features/test/web

    1. See error

    2022-06-09 14:58:46,534 - flybirds_log - INFO - report cmd:node E:\chase_code\AutoTest_PC\gsol_-pc_-auto-test\venv\lib\site-packages\flybirds\report\node_report\report.js report\18767f45-9780-4f4d-98bc-decdfca54c95 report\18767f45-9 780-4f4d-98bc-decdfca54c95 web multiple-cucumber-html-reporter platform: web lodash.templateSources[1]:10 _.each(suite.features[0].metadata, function(metadatum, metadatumIndex) { ; ^

    TypeError: Cannot read property 'metadata' of undefined at eval (lodash.templateSources[1]:10:27) at createFeaturesOverviewIndexPage (E:\chase_code\AutoTest_PC\gsol-pc_-auto-test\venv\lib\site-packages\flybirds\report\node_report\node_modules\multiple-cucumber-html-reporter\lib\generate-report.js:455:84) at Object.generateReport [as generate] (E:\chase_code\AutoTest_PC\gsol_-pc_-auto-test\venv\lib\site-packages\flybirds\report\node_report\node_modules\multiple-cucumber-html-reporter\lib\generate-report.js:139:3) at Object. (E:\chase_code\AutoTest_PC\gsol_-pc_-auto-test\venv\lib\site-packages\flybirds\report\node_report\report.js:46:8) at Module._compile (internal/modules/cjs/loader.js:1068:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10) at Module.load (internal/modules/cjs/loader.js:933:32) at Function.Module._load (internal/modules/cjs/loader.js:774:14) at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) at internal/main/run_main_module.js:17:47

    预期结果 / Expected behavior A clear and concise description of what you expected to happen.

    截图 / Screenshots If applicable, add screenshots to help explain your problem.

    环境信息 / Environment (please complete the following information):

    • Device: [e.g. iPhone6]
    • OS: [WIN 10]
    • Browser [e.g. stock browser, safari]
    • Version [e.g. 22]

    Additional context Add any other context about the problem here.

    opened by chase001 8
  • 操作步骤: 点击[], 超时时间没有生效

    操作步骤: 点击[], 超时时间没有生效

    问题描述 / Describe the bug flybirds_config.json中的“waitEleTimeout”和步骤中指定的timeout都没有生效

    问题复现步骤 / To Reproduce

    1. 测试网页
    <html>
        <body>
            Test Timeout
        </body>
        <script>
            setTimeout(function(){
                var button = document.createElement("button");
                button.setAttribute("id", "delay_btn");
                button.innerHTML = "Submit";
                document.body.appendChild(button);
            }, 1000);
        </script>
    </html>
    
    1. test.feature
    # language: zh-CN
    功能: web点击
    
      场景: 点击元素
        假如 跳转页面到[http://127.0.0.1:5500/show.html]
          而且 点击[#delay_btn, timeout=10]
        那么 全屏截图
    
    1. 执行过程中没有感知到等待的时间, 直接报错了.
    2022-05-19 12:48:20,999 - flybirds_log - INFO - [scenario_OnAfter] start!
    2022-05-19 12:48:21,000 - flybirds_log - INFO - [scenario_fail] feature:web点击, scenario:点击元素 failed to run
    2022-05-19 12:48:21,001 - flybirds_log - INFO - [scenario_fail] step:点击[#delay_btn, timeout=10]
    2022-05-19 12:48:21,001 - flybirds_log - ERROR - [scenario_fail] step error msg:Traceback (most recent call last):
      File "/home/xxxxxx/VSProjects/xxxxxx/venv/lib/python3.7/site-packages/behave/model.py", line 1329, in run
        match.run(runner.context)
      File "/home/xxxxxx/VSProjects/xxxxxx/venv/lib/python3.7/site-packages/behave/matchers.py", line 98, in run
        self.func(context, *args, **kwargs)
      File "/home/xxxxxx/VSProjects/xxxxxx/venv/lib/python3.7/site-packages/flybirds/utils/dsl_helper.py", line 171, in wrapper_func
        func(*args, **kwargs)
      File "/home/xxxxxx/VSProjects/xxxxxx/venv/lib/python3.7/site-packages/flybirds/core/dsl/step/element.py", line 49, in click_ele
        g_Context.step.click_ele(context, selector)
      File "/home/xxxxxx/VSProjects/xxxxxx/venv/lib/python3.7/site-packages/flybirds/core/plugin/plugins/default/web/step.py", line 71, in click_ele
        ele.ele_click(context, selector)
      File "/home/xxxxxx/VSProjects/xxxxxx/venv/lib/python3.7/site-packages/flybirds/core/plugin/plugins/default/web/element.py", line 103, in ele_click
        locator = self.get_ele_locator(param)
      File "/home/xxxxxx/VSProjects/xxxxxx/venv/lib/python3.7/site-packages/flybirds/core/plugin/plugins/default/web/element.py", line 68, in get_ele_locator
        selector_node, selector_str = self.get_ele_handle(selector)
      File "/home/xxxxxx/VSProjects/xxxxxx/venv/lib/python3.7/site-packages/flybirds/core/plugin/plugins/default/web/element.py", line 89, in get_ele_handle
        raise FlybirdsVerifyEleException(selector=selector_str)
    flybirds.core.exceptions.FlybirdsVerifyEleException: Timeout 35000ms exceeded.
    ==================== logs ====================
    waiting for selector "text=#delay_btn"
    ==============================================
    

    预期结果 / Expected behavior 超时时间和文档中的描述一致 image

    环境信息 / Environment (please complete the following information):

    • Browser [e.g. chromium]
    • Version [e.g. 0.2.2]
    bug 
    opened by jasmineamber 7
  • centOS执行脚本报错,提示HOOK-ERROR in before_all: AttributeError: 'PluginProxy' object has no attribute 'device_connect'

    centOS执行脚本报错,提示HOOK-ERROR in before_all: AttributeError: 'PluginProxy' object has no attribute 'device_connect'

    问题描述 / Describe the bug centOS执行脚本报错,提示HOOK-ERROR in before_all: AttributeError: 'PluginProxy' object has no attribute 'device_connect'

    截图 / Screenshots 第一个问题: image 这个目录下文件存在,没有问题 image

    第二个问题: image

    环境信息 / Environment (please complete the following information):

    • OS: centOS7
    opened by ericchen82 6
  • pip3 install flybirds  安装报错subprocess-exited-with-error

    pip3 install flybirds 安装报错subprocess-exited-with-error

    Installing build dependencies ... error error: subprocess-exited-with-error

    × pip subprocess to install build dependencies did not run successfully. │ exit code: 1 ╰─> [1102 lines of output] Ignoring numpy: markers 'python_version == "3.6"' don't match your environment Ignoring numpy: markers 'python_version == "3.7"' don't match your environment Ignoring numpy: markers 'python_version == "3.8"' don't match your environment Collecting setuptools Using cached setuptools-63.2.0-py3-none-any.whl (1.2 MB) Collecting wheel Using cached wheel-0.37.1-py2.py3-none-any.whl (35 kB) Collecting scikit-build Using cached scikit_build-0.15.0-py2.py3-none-any.whl (77 kB) Collecting cmake Using cached cmake-3.22.5-py2.py3-none-macosx_10_10_universal2.macosx_10_10_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl (75.2 MB) Collecting pip Using cached pip-22.1.2-py3-none-any.whl (2.1 MB) Collecting numpy==1.19.3 Using cached numpy-1.19.3.zip (7.3 MB) Installing build dependencies: started Installing build dependencies: still running... Installing build dependencies: finished with status 'done' Getting requirements to build wheel: started Getting requirements to build wheel: finished with status 'done' Preparing metadata (pyproject.toml): started Preparing metadata (pyproject.toml): finished with status 'done' Collecting packaging Using cached packaging-21.3-py3-none-any.whl (40 kB) Collecting distro Using cached distro-1.7.0-py3-none-any.whl (20 kB) Collecting pyparsing!=3.0.5,>=2.0.2 Using cached pyparsing-3.0.9-py3-none-any.whl (98 kB) Building wheels for collected packages: numpy Building wheel for numpy (pyproject.toml): started Building wheel for numpy (pyproject.toml): finished with status 'error' error: subprocess-exited-with-error

        × Building wheel for numpy (pyproject.toml) did not run successfully.
        │ exit code: 1
        ╰─> [1058 lines of output]
            Running from numpy source directory.
            numpy/random/_bounded_integers.pxd.in has not changed
            numpy/random/_philox.pyx has not changed
            numpy/random/_bounded_integers.pyx.in has not changed
            numpy/random/_sfc64.pyx has not changed
            numpy/random/_mt19937.pyx has not changed
            numpy/random/bit_generator.pyx has not changed
            Processing numpy/random/_bounded_integers.pyx
            numpy/random/mtrand.pyx has not changed
            numpy/random/_generator.pyx has not changed
            numpy/random/_pcg64.pyx has not changed
            numpy/random/_common.pyx has not changed
            Cythonizing sources
            blas_opt_info:
            blas_mkl_info:
            customize UnixCCompiler
              libraries mkl_rt not found in ['/Library/Frameworks/Python.framework/Versions/3.9/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE
      
            blis_info:
              libraries blis not found in ['/Library/Frameworks/Python.framework/Versions/3.9/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE
      
            openblas_info:
              libraries openblas not found in ['/Library/Frameworks/Python.framework/Versions/3.9/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE
      
            atlas_3_10_blas_threads_info:
            Setting PTATLAS=ATLAS
              libraries tatlas not found in ['/Library/Frameworks/Python.framework/Versions/3.9/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE
      
            atlas_3_10_blas_info:
              libraries satlas not found in ['/Library/Frameworks/Python.framework/Versions/3.9/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE
      
            atlas_blas_threads_info:
            Setting PTATLAS=ATLAS
              libraries ptf77blas,ptcblas,atlas not found in ['/Library/Frameworks/Python.framework/Versions/3.9/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE
      
            atlas_blas_info:
              libraries f77blas,cblas,atlas not found in ['/Library/Frameworks/Python.framework/Versions/3.9/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE
      
            accelerate_info:
              libraries accelerate not found in ['/Library/Frameworks/Python.framework/Versions/3.9/lib', '/usr/local/lib', '/usr/lib']
            Library accelerate was not found. Ignoring
              libraries veclib not found in ['/Library/Frameworks/Python.framework/Versions/3.9/lib', '/usr/local/lib', '/usr/lib']
            Library veclib was not found. Ignoring
              FOUND:
                extra_compile_args = ['-faltivec', '-I/System/Library/Frameworks/vecLib.framework/Headers']
                extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
                define_macros = [('NO_ATLAS_INFO', 3), ('HAVE_CBLAS', None)]
      
              FOUND:
                extra_compile_args = ['-faltivec', '-I/System/Library/Frameworks/vecLib.framework/Headers']
                extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
                define_macros = [('NO_ATLAS_INFO', 3), ('HAVE_CBLAS', None)]
      
            non-existing path in 'numpy/distutils': 'site.cfg'
            lapack_opt_info:
            lapack_mkl_info:
              libraries mkl_rt not found in ['/Library/Frameworks/Python.framework/Versions/3.9/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE
      
            openblas_lapack_info:
              libraries openblas not found in ['/Library/Frameworks/Python.framework/Versions/3.9/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE
      
            openblas_clapack_info:
              libraries openblas,lapack not found in ['/Library/Frameworks/Python.framework/Versions/3.9/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE
      
            flame_info:
              libraries flame not found in ['/Library/Frameworks/Python.framework/Versions/3.9/lib', '/usr/local/lib', '/usr/lib']
              NOT AVAILABLE
      
            atlas_3_10_threads_info:
            Setting PTATLAS=ATLAS
              libraries lapack_atlas not found in /Library/Frameworks/Python.framework/Versions/3.9/lib
              libraries tatlas,tatlas not found in /Library/Frameworks/Python.framework/Versions/3.9/lib
              libraries lapack_atlas not found in /usr/local/lib
              libraries tatlas,tatlas not found in /usr/local/lib
              libraries lapack_atlas not found in /usr/lib
              libraries tatlas,tatlas not found in /usr/lib
            <class 'numpy.distutils.system_info.atlas_3_10_threads_info'>
              NOT AVAILABLE
      
            atlas_3_10_info:
              libraries lapack_atlas not found in /Library/Frameworks/Python.framework/Versions/3.9/lib
              libraries satlas,satlas not found in /Library/Frameworks/Python.framework/Versions/3.9/lib
              libraries lapack_atlas not found in /usr/local/lib
              libraries satlas,satlas not found in /usr/local/lib
              libraries lapack_atlas not found in /usr/lib
              libraries satlas,satlas not found in /usr/lib
            <class 'numpy.distutils.system_info.atlas_3_10_info'>
              NOT AVAILABLE
      
            atlas_threads_info:
            Setting PTATLAS=ATLAS
              libraries lapack_atlas not found in /Library/Frameworks/Python.framework/Versions/3.9/lib
              libraries ptf77blas,ptcblas,atlas not found in /Library/Frameworks/Python.framework/Versions/3.9/lib
              libraries lapack_atlas not found in /usr/local/lib
              libraries ptf77blas,ptcblas,atlas not found in /usr/local/lib
              libraries lapack_atlas not found in /usr/lib
              libraries ptf77blas,ptcblas,atlas not found in /usr/lib
            <class 'numpy.distutils.system_info.atlas_threads_info'>
              NOT AVAILABLE
      
            atlas_info:
              libraries lapack_atlas not found in /Library/Frameworks/Python.framework/Versions/3.9/lib
              libraries f77blas,cblas,atlas not found in /Library/Frameworks/Python.framework/Versions/3.9/lib
              libraries lapack_atlas not found in /usr/local/lib
              libraries f77blas,cblas,atlas not found in /usr/local/lib
              libraries lapack_atlas not found in /usr/lib
              libraries f77blas,cblas,atlas not found in /usr/lib
            <class 'numpy.distutils.system_info.atlas_info'>
              NOT AVAILABLE
      
              FOUND:
                extra_compile_args = ['-faltivec', '-I/System/Library/Frameworks/vecLib.framework/Headers']
                extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
                define_macros = [('NO_ATLAS_INFO', 3), ('HAVE_CBLAS', None)]
      
            /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/distutils/dist.py:274: UserWarning: Unknown distribution option: 'define_macros'
              warnings.warn(msg)
            running bdist_wheel
            running build
            running config_cc
            unifing config_cc, config, build_clib, build_ext, build commands --compiler options
            running config_fc
            unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options
            running build_src
            build_src
            building py_modules sources
            building library "npymath" sources
            Could not locate executable gfortran
            Could not locate executable f95
            Could not locate executable f90
            Could not locate executable f77
            Could not locate executable xlf90
            Could not locate executable xlf
            Could not locate executable ifort
            Could not locate executable ifc
            Could not locate executable g77
            Could not locate executable g95
            Could not locate executable pgfortran
            don't know how to compile Fortran code on platform 'posix'
              adding 'build/src.macosx-10.9-universal2-3.9/numpy/core/src/npymath' to include_dirs.
            None - nothing done with h_files = ['build/src.macosx-10.9-universal2-3.9/numpy/core/src/npymath/npy_math_internal.h']
            building library "npysort" sources
              adding 'build/src.macosx-10.9-universal2-3.9/numpy/core/src/common' to include_dirs.
            None - nothing done with h_files = ['build/src.macosx-10.9-universal2-3.9/numpy/core/src/common/npy_sort.h', 'build/src.macosx-10.9-universal2-3.9/numpy/core/src/common/npy_partition.h', 'build/src.macosx-10.9-universal2-3.9/numpy/core/src/common/npy_binsearch.h']
            building library "npyrandom" sources
            building extension "numpy.core._multiarray_tests" sources
            building extension "numpy.core._multiarray_umath" sources
              adding 'build/src.macosx-10.9-universal2-3.9/numpy/core/src/umath' to include_dirs.
              adding 'build/src.macosx-10.9-universal2-3.9/numpy/core/src/npymath' to include_dirs.
              adding 'build/src.macosx-10.9-universal2-3.9/numpy/core/src/common' to include_dirs.
            numpy.core - nothing done with h_files = ['build/src.macosx-10.9-universal2-3.9/numpy/core/src/umath/funcs.inc', 'build/src.macosx-10.9-universal2-3.9/numpy/core/src/umath/simd.inc', 'build/src.macosx-10.9-universal2-3.9/numpy/core/src/umath/loops.h', 'build/src.macosx-10.9-universal2-3.9/numpy/core/src/umath/matmul.h', 'build/src.macosx-10.9-universal2-3.9/numpy/core/src/umath/clip.h', 'build/src.macosx-10.9-universal2-3.9/numpy/core/src/npymath/npy_math_internal.h', 'build/src.macosx-10.9-universal2-3.9/numpy/core/src/common/templ_common.h', 'build/src.macosx-10.9-universal2-3.9/numpy/core/include/numpy/config.h', 'build/src.macosx-10.9-universal2-3.9/numpy/core/include/numpy/_numpyconfig.h', 'build/src.macosx-10.9-universal2-3.9/numpy/core/include/numpy/__multiarray_api.h', 'build/src.macosx-10.9-universal2-3.9/numpy/core/include/numpy/__ufunc_api.h']
            building extension "numpy.core._umath_tests" sources
            building extension "numpy.core._rational_tests" sources
            building extension "numpy.core._struct_ufunc_tests" sources
            building extension "numpy.core._operand_flag_tests" sources
            building extension "numpy.fft._pocketfft_internal" sources
            building extension "numpy.linalg.lapack_lite" sources
            building extension "numpy.linalg._umath_linalg" sources
            building extension "numpy.random._mt19937" sources
            building extension "numpy.random._philox" sources
            building extension "numpy.random._pcg64" sources
            building extension "numpy.random._sfc64" sources
            building extension "numpy.random._common" sources
            building extension "numpy.random.bit_generator" sources
            building extension "numpy.random._generator" sources
            building extension "numpy.random._bounded_integers" sources
            building extension "numpy.random.mtrand" sources
            building data_files sources
            build_src: building npy-pkg config files
            running build_py
            creating build/lib.macosx-10.9-universal2-3.9
            creating build/lib.macosx-10.9-universal2-3.9/numpy
            copying numpy/conftest.py -> build/lib.macosx-10.9-universal2-3.9/numpy
            copying numpy/version.py -> build/lib.macosx-10.9-universal2-3.9/numpy
            copying numpy/_globals.py -> build/lib.macosx-10.9-universal2-3.9/numpy
            copying numpy/__init__.py -> build/lib.macosx-10.9-universal2-3.9/numpy
            copying numpy/dual.py -> build/lib.macosx-10.9-universal2-3.9/numpy
            copying numpy/_distributor_init.py -> build/lib.macosx-10.9-universal2-3.9/numpy
            copying numpy/setup.py -> build/lib.macosx-10.9-universal2-3.9/numpy
            copying numpy/ctypeslib.py -> build/lib.macosx-10.9-universal2-3.9/numpy
            copying numpy/matlib.py -> build/lib.macosx-10.9-universal2-3.9/numpy
            copying numpy/_pytesttester.py -> build/lib.macosx-10.9-universal2-3.9/numpy
            copying build/src.macosx-10.9-universal2-3.9/numpy/__config__.py -> build/lib.macosx-10.9-universal2-3.9/numpy
            creating build/lib.macosx-10.9-universal2-3.9/numpy/compat
            copying numpy/compat/py3k.py -> build/lib.macosx-10.9-universal2-3.9/numpy/compat
            copying numpy/compat/__init__.py -> build/lib.macosx-10.9-universal2-3.9/numpy/compat
            copying numpy/compat/setup.py -> build/lib.macosx-10.9-universal2-3.9/numpy/compat
            copying numpy/compat/_inspect.py -> build/lib.macosx-10.9-universal2-3.9/numpy/compat
            creating build/lib.macosx-10.9-universal2-3.9/numpy/compat/tests
            copying numpy/compat/tests/__init__.py -> build/lib.macosx-10.9-universal2-3.9/numpy/compat/tests
            copying numpy/compat/tests/test_compat.py -> build/lib.macosx-10.9-universal2-3.9/numpy/compat/tests
            creating build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/umath.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/fromnumeric.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/_dtype.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/_add_newdocs.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/_methods.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/_internal.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/_string_helpers.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/multiarray.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/_asarray.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/records.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/__init__.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/setup_common.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/memmap.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/overrides.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/getlimits.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/_dtype_ctypes.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/defchararray.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/shape_base.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/machar.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/setup.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/numeric.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/function_base.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/einsumfunc.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/umath_tests.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/_ufunc_config.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/_exceptions.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/numerictypes.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/_type_aliases.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/cversions.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/arrayprint.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            copying numpy/core/code_generators/generate_numpy_api.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core
            creating build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/test_numerictypes.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/test_scalar_methods.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/test_scalarmath.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/test_item_selection.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/test_machar.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/test_unicode.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/test_arrayprint.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/test_scalarbuffer.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/test_indexerrors.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/test_print.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/test_half.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/test_mem_overlap.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/test_shape_base.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/test_deprecations.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/__init__.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/test_errstate.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/test_records.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/test_scalarinherit.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
            copying numpy/core/tests/test_indexing.py -> build/lib.macosx-10.9-universal2-3.9/numpy/core/tests
    
    opened by shijie233 4
  • 支持设置浏览器语言环境

    支持设置浏览器语言环境

    Is your feature request related to a problem? Please describe. 支持在flybirds_config.json中设置browser locale

    Describe the solution you'd like 同一个定位方式, 在不同的语言环境下可能会导致定位表现不一致

    Describe alternatives you've considered 希望能通过配置文件自定义locale

    context = browser.new_context(record_video_dir="videos",
                                          ignore_https_errors=True,
                                          locale="zh-CN")
    
    opened by jasmineamber 4
  • [BUG] install fail on macOS

    [BUG] install fail on macOS

    问题描述 / Describe the bug

    install fail on macOS, cause flybirds depend on a lower version tidevice 0.5.9

    问题复现步骤 / To Reproduce

    Collecting flybirds
      Downloading flybirds-0.1.6-py3-none-any.whl (2.9 MB)
         |████████████████████████████████| 2.9 MB 2.6 MB/s
      Downloading flybirds-0.1.5-py3-none-any.whl (2.9 MB)
         |████████████████████████████████| 2.9 MB 2.7 MB/s
      Downloading flybirds-0.1.4-py3-none-any.whl (2.9 MB)
         |████████████████████████████████| 2.9 MB 2.6 MB/s
      Downloading flybirds-0.1.3-py3-none-any.whl (2.9 MB)
         |████████████████████████████████| 2.9 MB 2.7 MB/s
      Downloading flybirds-0.1.2-py3-none-any.whl (2.9 MB)
         |████████████████████████████████| 2.9 MB 2.6 MB/s
      Downloading flybirds-0.1.1-py3-none-any.whl (2.9 MB)
         |████████████████████████████████| 2.9 MB 2.7 MB/s
    ERROR: Cannot install flybirds==0.1.1, flybirds==0.1.2, flybirds==0.1.3, flybirds==0.1.4, flybirds==0.1.5 and flybirds==0.1.6 because these package versions have conflicting dependencies.
    
    The conflict is caused by:
        flybirds 0.1.6 depends on tidevice==0.5.9
        flybirds 0.1.5 depends on tidevice==0.5.9
        flybirds 0.1.4 depends on tidevice==0.5.9
        flybirds 0.1.3 depends on tidevice==0.5.9
        flybirds 0.1.2 depends on tidevice==0.5.9
        flybirds 0.1.1 depends on tidevice==0.5.9
    
    To fix this you could try to:
    1. loosen the range of package versions you've specified
    2. remove package versions to allow pip attempt to solve the dependency conflict
    
    ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/user_guide/#fixing-conflicting-dependencies
    WARNING: You are using pip version 21.2.4; however, version 22.0.4 is available.
    You should consider upgrading via the '/Users/wetest/.pyenv/versions/3.9.10/bin/python3.9 -m pip install --upgrade pip' command.
    FAIL: 1
    

    预期结果 / Expected behavior

    should support with the newest tidevice

    截图 / Screenshots

    企业微信截图_d96f13b4-0a15-4006-b01c-762c0b166a0f

    环境信息 / Environment (please complete the following information):

    • OS: macOS 12.0.1
    bug 
    opened by prife 4
  • 元素定位支持xpath

    元素定位支持xpath

    Is your feature request related to a problem? Please describe. 元素定位支持xpath

    Describe the solution you'd like A clear and concise description of what you want to happen. 目前web定位似乎用的page.query_selector, playwright支持page.locator同时兼容多种定位方式

    opened by jasmineamber 3
  • flybirds run -P features/test/android MODULE_NOT_FOUND

    flybirds run -P features/test/android MODULE_NOT_FOUND

    问题描述 / Describe the bug A clear and concise description of what the bug is.

    问题复现步骤 / To Reproduce

    1. Go to '...'
    2. Click on '....'
    3. Scroll down to '....'
    4. See error 预期结果 / Expected behavior A clear and concise description of what you expected to happen.

    截图 / Screenshots If applicable, add screenshots to help explain your problem.

    环境信息 / Environment (please complete the following information):

    • Device: [e.g. iPhone6]
    • OS: [e.g. iOS8.1]
    • Browser [e.g. stock browser, safari]
    • Version [e.g. 22]

    Additional context Add any other context about the problem here.

    请问adb devices这里能使用bluestack模拟器吗

    我按照教程操作下来

    (base) PS D:\Download\audio-visual\saas\data\indiehackerebooks> flybirds create
    Welcome to flybirds cli. Please enter any information to continue.
    Please input your project name>>: indie
    Please input your test platform? (Android/IOS/Web): android
    Do you want to configure your deviceId now?(this step can be skipped) [y/N]: y
    Please input your deviceId?: emulator-5554
    Do you want to configure your packageName now?(this step can be skipped) [y/N]: n
    You can configure your packageName later in the project's flybirds_config.json file.
    Cloning into 'indie'...
    Processing  [####################################]  100%
    Done it! Create Project indie has success!
    You can find it at: D:\Download\audio-visual\saas\data\indiehackerebooks\indie
    (base) PS D:\Download\audio-visual\saas\data\indiehackerebooks> flybirds run -P features/test/android
    2022-05-21 06:39:46,394 - flybirds_log - INFO - flybirds cmd info: features/test/android None --format=json report\b6a71e7f-e8a6-443e-8db8-764e94d29c0c\report.json () True None True local
    Traceback (most recent call last):
      File "D:\Program Files\anaconda3\lib\runpy.py", line 194, in _run_module_as_main
        return _run_code(code, main_globals, None,
      File "D:\Program Files\anaconda3\lib\runpy.py", line 87, in _run_code
        exec(code, run_globals)
      File "D:\Program Files\anaconda3\Scripts\flybirds.exe\__main__.py", line 7, in <module>
      File "D:\Program Files\anaconda3\lib\site-packages\flybirds\launcher.py", line 13, in main
        cli_main.app()
      File "D:\Program Files\anaconda3\lib\site-packages\typer\main.py", line 214, in __call__
        return get_command(self)(*args, **kwargs)
      File "D:\Program Files\anaconda3\lib\site-packages\click\core.py", line 1128, in __call__
        return self.main(*args, **kwargs)
      File "D:\Program Files\anaconda3\lib\site-packages\click\core.py", line 1053, in main
        rv = self.invoke(ctx)
      File "D:\Program Files\anaconda3\lib\site-packages\click\core.py", line 1659, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "D:\Program Files\anaconda3\lib\site-packages\click\core.py", line 1395, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "D:\Program Files\anaconda3\lib\site-packages\click\core.py", line 754, in invoke
        return __callback(*args, **kwargs)
      File "D:\Program Files\anaconda3\lib\site-packages\typer\main.py", line 500, in wrapper
        return callback(**use_params)  # type: ignore
      File "D:\Program Files\anaconda3\lib\site-packages\flybirds\cli\__main__.py", line 76, in runner
        run_args = parse_args(
      File "D:\Program Files\anaconda3\lib\site-packages\flybirds\cli\parse_args.py", line 47, in parse_args
        check_workspace_args(feature_path)
      File "D:\Program Files\anaconda3\lib\site-packages\flybirds\cli\parse_args.py", line 31, in check_workspace_args
        raise Exception(f"not find config directory in {base_dir}")
    Exception: not find config directory in D:\Download\audio-visual\saas\data\indiehackerebooks
    (base) PS D:\Download\audio-visual\saas\data\indiehackerebooks> cd .\indie\
    (base) PS D:\Download\audio-visual\saas\data\indiehackerebooks\indie> flybirds run -P features/test/android
    2022-05-21 06:40:21,391 - flybirds_log - INFO - flybirds cmd info: features/test/android None --format=json report\2790eb80-d401-4ac7-bbd1-8c0e6a0765e2\report.json () True None True local
    2022-05-21 06:40:21,391 - flybirds_log - INFO - report path: -o report\2790eb80-d401-4ac7-bbd1-8c0e6a0765e2\report.json
    2022-05-21 06:40:21,392 - flybirds_log - INFO - screenshot path: report\2790eb80-d401-4ac7-bbd1-8c0e6a0765e2\screenshot
    2022-05-21 06:40:21,392 - flybirds_log - INFO - the assembled behave execution command: behave features/test/android --format=json -o report\2790eb80-d401-4ac7-bbd1-8c0e6a0765e2\report.json --define screenShotDir=cmVwb3J0XDI3OTBlYjgwLWQ0MDEtNGFjNy1iYmQxLThjMGU2YTA3NjVlMlxzY3JlZW5zaG90 --define run_at=bG9jYWw= --no-color --no-capture --no-capture-stderr
    2022-05-21 06:40:21,392 - flybirds_log - INFO - ============last run_args: {'cmd_str': 'behave features/test/android --format=json -o report\\2790eb80-d401-4ac7-bbd1-8c0e6a0765e2\\report.json --define screenShotDir=cmVwb3J0XDI3OTBlYjgwLWQ0MDEtNGFjNy1iYmQxLThjMGU2YTA3NjVlMlxzY3JlZW5zaG90 --define run_at=bG9jYWw= --no-color --no-capture --no-capture-stderr', 'need_rerun': True, 'report_dir_path': 'report\\2790eb80-d401-4ac7-bbd1-8c0e6a0765e2', 'use_define': ['--define', 'screenShotDir=cmVwb3J0XDI3OTBlYjgwLWQ0MDEtNGFjNy1iYmQxLThjMGU2YTA3NjVlMlxzY3JlZW5zaG90', '--define', 'run_at=bG9jYWw='], 'env_config': None, 'report_format': '--format=json', 'html': True, 'run_at': 'local', 'processes': 4, 'feature_path': 'features/test/android', 'parsed_tags': []}
    2022-05-21 06:40:21,392 - flybirds_log - INFO - received run_args: {'cmd_str': 'behave features/test/android --format=json -o report\\2790eb80-d401-4ac7-bbd1-8c0e6a0765e2\\report.json --define screenShotDir=cmVwb3J0XDI3OTBlYjgwLWQ0MDEtNGFjNy1iYmQxLThjMGU2YTA3NjVlMlxzY3JlZW5zaG90 --define run_at=bG9jYWw= --no-color --no-capture --no-capture-stderr', 'need_rerun': True, 'report_dir_path': 'report\\2790eb80-d401-4ac7-bbd1-8c0e6a0765e2', 'use_define': ['--define', 'screenShotDir=cmVwb3J0XDI3OTBlYjgwLWQ0MDEtNGFjNy1iYmQxLThjMGU2YTA3NjVlMlxzY3JlZW5zaG90', '--define', 'run_at=bG9jYWw='], 'env_config': None, 'report_format': '--format=json', 'html': True, 'run_at': 'local', 'processes': 4, 'feature_path': 'features/test/android', 'parsed_tags': []}
    2022-05-21 06:40:21,399 - flybirds_log - INFO - find extend pkg
    2022-05-21 06:40:21,766 - flybirds_log - INFO - use_define: ['--define', 'screenShotDir=cmVwb3J0XDI3OTBlYjgwLWQ0MDEtNGFjNy1iYmQxLThjMGU2YTA3NjVlMlxzY3JlZW5zaG90', '--define', 'run_at=bG9jYWw=']
    2022-05-21 06:40:24,090 - flybirds_log - INFO - change behave json format feature to flybirds feature
    2022-05-21 06:40:24,091 - flybirds_log - INFO - change behave add_step_definition to flybirds add_step_definition
    2022-05-21 06:40:24,127 - flybirds_log - INFO - [before_all_hook] user_data:{'screenShotDir': 'cmVwb3J0XDI3OTBlYjgwLWQ0MDEtNGFjNy1iYmQxLThjMGU2YTA3NjVlMlxzY3JlZW5zaG90', 'run_at': 'bG9jYWw='}
    2022-05-21 06:40:24,127 - flybirds_log - INFO - [loader] user_data: {'screenShotDir': 'report\\2790eb80-d401-4ac7-bbd1-8c0e6a0765e2\\screenshot', 'run_at': 'local'}
    2022-05-21 06:40:24,129 - flybirds_log - INFO - [loader] run platform: android
    D:\Program Files\anaconda3\lib\site-packages\numpy\_distributor_init.py:30: UserWarning: loaded more than 1 DLL from .libs:
    D:\Program Files\anaconda3\lib\site-packages\numpy\.libs\libopenblas.PYQHXLVVQ7VESDPUVUADXEVJOBGHJPAY.gfortran-win_amd64.dll
    D:\Program Files\anaconda3\lib\site-packages\numpy\.libs\libopenblas.xwydx2ikjw2nmtwsfyngfuwkqu3lytcz.gfortran-win_amd64.dll
      warnings.warn("loaded more than 1 DLL from .libs:"
    HOOK-ERROR in before_all: ImportError: cannot import name '_registerMatType' from 'cv2.cv2' (D:\Program Files\anaconda3\lib\site-packages\cv2\cv2.cp38-win_amd64.pyd)
    HOOK-ERROR in after_all: AttributeError: 'NoneType' object has no attribute 'device_info'
    
    ABORTED: By user.
    0 features passed, 0 failed, 0 skipped, 11 untested
    0 scenarios passed, 0 failed, 0 skipped, 23 untested
    0 steps passed, 0 failed, 0 skipped, 0 undefined, 117 untested
    Took 0m0.000s
    2022-05-21 06:40:24,390 - flybirds_log - INFO - Feature sum_count rerun after creation failure <= 0 or fail_count <= 0
    2022-05-21 06:40:24,390 - flybirds_log - INFO - True
    2022-05-21 06:40:24,396 - flybirds_log - INFO - Do you need to rerun the task: False, the failed retry task was not executed
    2022-05-21 06:40:24,396 - flybirds_log - INFO - Start processing the json report. report_dir_path: [report\2790eb80-d401-4ac7-bbd1-8c0e6a0765e2],rerun_report_dir_path:[None]
    2022-05-21 06:40:24,398 - flybirds_log - INFO - start generate report
    2022-05-21 06:40:24,398 - flybirds_log - INFO - report cmd:node D:\Program Files\anaconda3\lib\site-packages\flybirds\report\node_report\report.js report\2790eb80-d401-4ac7-bbd1-8c0e6a0765e2 report\2790eb80-d401-4ac7-bbd1-8c0e6a0765e2 android
    node:internal/modules/cjs/loader:936
      throw err;
      ^
    
    Error: Cannot find module 'D:\Program'
        at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
        at Function.Module._load (node:internal/modules/cjs/loader:778:27)
        at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
        at node:internal/main/run_main_module:17:47 {
      code: 'MODULE_NOT_FOUND',
    

    (base) PS D:\Download\audio-visual\saas\data\indiehackerebooks\indie> adb devices List of devices attached emulator-5554 offline

    opened by shopconan 2
  • 操作语法中增加

    操作语法中增加"循环"的功能

    Is your feature request related to a problem? Please describe. 场景: 答题功能, 答完一题, 出现下一题, 全部答完 显示成绩 页面

    目前的功能似乎只能处理固定步骤的测试, 比如上面的场景, 如果题目的数量是不确定的, 没办法通过现有的功能判断出现 成绩页面 时结束测试.

    Describe the solution you'd like 希望增加一个循环的功能, 比如: 当 成绩页面 出现时, 可以结束测试

    opened by jasmineamber 2
  • app支持输入框内容的清空并输入

    app支持输入框内容的清空并输入

    Is your feature request related to a problem? Please describe. A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

    Describe the solution you'd like A clear and concise description of what you want to happen.

    Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered.

    Additional context Add any other context or screenshots about the feature request here.

    enhancement 
    opened by Luhh6 1
Releases(v0.5.2)
  • v0.5.2(Dec 23, 2022)

  • v0.5.1(Dec 18, 2022)

    Feature

    1. Support for regional data segmentation and detect Details
    • "click ocr regional[{selector}] text[{param2}]": ["点击区域[{selector}]中扫描文案[{param2}]"]
    • "ocr regional[{selector}] exist text[{param2}]": ["扫描区块[{selector}]中存在[{param2}]的文案"]
    • "ocr regional[{selector}] contain text[{param2}]": ["扫描区块[{selector}]中包含[{param2}]的文案"]

    Bug fix

    1. multiple Tags issues Details
    Source code(tar.gz)
    Source code(zip)
  • v0.5.0(Nov 25, 2022)

  • v0.4.9(Nov 16, 2022)

  • v0.4.8(Nov 6, 2022)

    Features

    #122 Support user-defined browser cookies

    • cookies <List[Dict]>#
      • name <str>
      • value <str>
      • url <str> either url or domain / path are required. Optional.
      • domain <str> either url or domain / path are required Optional.
      • path <str> either url or domain / path are required Optional.
      • expires <float> Unix time in seconds. Optional.
      • httpOnly <bool> Optional.
      • secure <bool> Optional.
      • sameSite <"Strict"|"Lax"|"None"> Optional.
    '''
    Following is add cookie example
    1. modify before_all_extend method in pscript/dsl/hook.py of your project
    2. define your cookies and add it into global cache
    3. flybirds will add cookies into browser
    '''
    from flybirds.core.global_context import GlobalContext
    
    def before_all_extend(context):
        cookies = [{'name': 'taskid1', 'value': 'TYUUI12345ty1', "url": "https://hotel.trip.com"},
                   {'name': 'taskid2', 'value': 'TYUUI12345ty2', "url": "https://hotel.trip.com"}]
        GlobalContext.set_global_cache("cookies", cookies)
    
    
    Source code(tar.gz)
    Source code(zip)
  • v0.4.7(Oct 26, 2022)

    Feature

    #120 support paddleocr config "det_limit_type" and "det_limit_side_len"

    • For history project, you can add "ocr_det_limit_type" and "ocr_det_limit_side_len" in frame_info section of flybirds_config.json
    • For new project, these two configs will be added automatically after cli create
    Source code(tar.gz)
    Source code(zip)
  • v0.4.6(Oct 23, 2022)

  • v0.4.5(Sep 16, 2022)

    Feature

    支持长时间录频,解决 adb screen record 180秒的限制 #111 相关配置项:

    • "useAirtestRecord": true // 设置为true时开启长时间录屏
    • "scenarioScreenRecordTime": 180 // 单个case最大录屏时间,默认为180,根据需要调整
    • "screenRecordTime": 180。// 最大录屏时间,默认为180,根据需要调整
    Source code(tar.gz)
    Source code(zip)
  • v0.4.3(Sep 10, 2022)

    Feature

    1. APP 支持异常弹框检测,当元素检测失败时,检测是否存在弹框并尝试关闭它,关闭后继续执行case
    2. 兼容OCR文字包含箭头的场景
    3. Poco 元素检测逻辑优化
    Source code(tar.gz)
    Source code(zip)
  • v0.4.2(Aug 26, 2022)

    Feature

    1. 对失败场景的截图,自动进行白屏检测,在报告中显示结果 image

    Fix

    1. OCR扫描结果中部分文字内的空格,未能正常识别,导致验证失败 #99
    2. 依赖包安装优化 #105
    3. 优化错误提示 #103

    注意:Windows环境下,不再默认安装OCR相关依赖包,如需使用OCR,按照以下步骤操作

    1. 获取requirement文件:文件地址
    2. 执行命令pip install -r requirements_ml.txt
    3. 在flybirds_config.json 文件中配置 OCR 语言 ocrLang支持的语言
    Source code(tar.gz)
    Source code(zip)
  • v0.4.1(Aug 14, 2022)

    Features

    1. 新增OCR&OpenCV DSL #79
    • 向 [] 扫描 [] 的文案
    • 向 [] 查找 [] 的图像
    • OCR DSL 支持正则表达式语法
    1. 新增Web config 自定义浏览器参数
    "emulatedDevice": "iPad (gen 6)",
    "userAgent": "My user agent",
    "width": 550,
    "height": 550,
    "locale": "de-DE",
    "timezone": "Europe/Berlin",
    "deviceScaleFactor": 6,
    "hasTouch": false,
    "geolocation": {
      "longitude": 48.858455,
      "latitude": 2.294474
    },
    "permissions": ["geolocation"]
    
    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Aug 7, 2022)

    Features

    1. Support OpenCV DSL

      • "exist image [{param}]": ["存在图像[{param}]"]
      • "not exist image [{param}]": ["不存在图像[{param}]"]
      • "click image[{selector}]": ["点击图像[{selector}]"]

      Example

      1. create image folder into the project root folder, for example : "img"
      2. Put the images you want to detect in a folder
      3. write case
      功能:首页图像信息校验
      
      @p1
      场景: 图像检查
        当 启动APP[ctrip.english.debug]
        那么 页面扫描完成出现文字[Discover]
        那么 存在图像[img/exist.png]
        那么 不存在图像[img/ne.png]
        那么 点击图像[img/click.png]
        那么 页面扫描完成出现文字[Search]
      

    Enhancement

    1. [Web] optimizate case After run #77
    2. stop record performance need to improve #76
    Source code(tar.gz)
    Source code(zip)
  • v0.3.5(Jul 27, 2022)

    Feature

    支持对PaddleOCR扫描错误的结果进行补偿矫正 #72 操作说明

    1. config目录下增加 paddle_fix.json
    2. 在 paddle_fix.json 中自定义矫正配置
    {
    "{original value}":"{replace value}",
    "输公":"输入"
    }
    
    Source code(tar.gz)
    Source code(zip)
  • v0.3.4(Jul 22, 2022)

    Features

    1. step 中获取全局缓存 #65
    2. web 测试报告中,失败case添加console error 信息 #66

    Fix

    1. failRerun 配置不生效 #69

    Example

    1. 项目中自定义全局key
    from flybirds.core.global_context import GlobalContext
    
    def set_global_value():
    # 设置全局key
       GlobalContext.set_global_cache("order_id", "just a test")
    
    1. 在 pscript 包下面的 operation.py 中添加如下方法,自定义全局key获取方法
    from flybirds.core.global_context import GlobalContext
    
    def get_global_value(v):
    """
     replace with global cache
     """
    # order_id 为通过其他step 向global cache 中设置的值
     order_id = GlobalContext.get_global_cache("order_id")
    if order_id is not None:
    # 替换参数 v 中自定义全局缓存key(规则自己设定,框架不做限制)
     return v.replace("@order_id@", order_id)
    # 返回为None 表示不做替换
     return None
    
    1. 在case中使用自定义的全局key:order_id
    场景: 输入
    假如 跳转页面到[百度]
    而且 在[#kw]中输入[@order_id@]
    而且 等待[3]秒
    那么 全屏截图
    
    Source code(tar.gz)
    Source code(zip)
  • v0.3.3(Jul 14, 2022)

  • v0.3.2(Jul 6, 2022)

    Features

    1. DSL
    • ocr contain text[{selector}],扫描包含[{selector}]的文案
    • change ocr lang [{param}], 切换OCR语言[{param}]
    1. 支持项目中自定义全局key
    # 例子
    from flybirds.core.global_context import GlobalContext
    
    def test_global_cache():
    # 设置全局key
     GlobalContext.set_global_cache("key", "just a test")
    # 在需要使用的地方获取全局key,注意全局key会在执行完后自动清理
     key_value = GlobalContext.get_global_cache("key")
    print(key_value)
    
    Source code(tar.gz)
    Source code(zip)
  • v0.3.1(Jun 29, 2022)

  • v0.3.0(Jun 18, 2022)

    新增OCR功能,基于OCR进行页面元素识别、定位,解决了部分技术栈(如Flutter)下使用Poco无法对Android、iOS进行元素操作的问题。

    New Features

    1. 新增6个DSL API

    • ocr,全屏扫描
    • click ocr text[{selector}],点击扫描文案[{selector}]
    • in ocr[{selector}]input[{param2}],在扫描文字[{selector}]中输入[{param2}]
    • ocr exist text[{selector}],扫描存在[{selector}]的文案
    • ocr not exist text[{selector}],扫描不存在[{selector}]的文案
    • page ocr complete find text[{selector}],页面扫描完成出现文字[{selector}]

    OCR DSL使用例子

    OCR支持的语言

    语种 | 缩写 |   | 语种 | 缩写 |   | 语种 | 缩写 -- | -- | -- | -- | -- | -- | -- | -- 中文 | ch |   | 法文 | fr |   | 日文 | japan 英文 | en |   | 德文 | german |   | 韩文 | korean 繁体中文 | chinese_cht |   | 意大利文 | it |   | 俄罗斯文 | ru

    新增配置项

    • "ocrLang" // ocr扫描语言,默认为ch简体中文

    2. 支持web端自定义page url rule 以下是一个例子,修改文件psscript/custom_handle/operation.py

    import os
    from flybirds.utils import file_helper
    
    def get_page_url(param):
        path = os.path.join(os.getcwd(), "config", "schema_url.json")
        if os.path.exists(path):
            c_f = file_helper.get_json_from_file(path)
            if c_f.__contains__(param):
                    return c_f.get(param)
    
    
    Source code(tar.gz)
    Source code(zip)
  • v0.2.4(May 27, 2022)

    Features

    1. add web request interception related apis
    2. add support for web apis optional parameter timeout
    3. add support for custom browserContext
    4. use locator apis and deprecate ElementHandle apis

    Bug Fix

    1. fix Unexpected UTF-8 BOM error

    升级指南

    Source code(tar.gz)
    Source code(zip)
  • v0.2(Apr 15, 2022)

  • v0.1.6(Feb 24, 2022)

  • v0.1.5(Jan 26, 2022)

  • v0.1.4(Jan 16, 2022)

  • v0.1.3(Jan 10, 2022)

  • v0.1.2(Jan 4, 2022)

    v0.1.2

    • 支持中英文自然语言语法
    • 支持Android、IOS自动化操作,包含元素查找、点击、输入、页面跳转、截图等
    • 支持cli脚手架
    • 支持用户定义自动化扩展
    • 支持html报告
    • 提供帮助文档
    Source code(tar.gz)
    Source code(zip)
Owner
Ctrip, Inc.
Ctrip.com open source projects
Ctrip, Inc.
A Repository of Community-Driven Natural Instructions

A Repository of Community-Driven Natural Instructions TLDR; this repository maintains a community effort to create a large collection of tasks and the

AI2 244 Jan 4, 2023
Learning High-Speed Flight in the Wild

Learning High-Speed Flight in the Wild This repo contains the code associated to the paper Learning Agile Flight in the Wild. For more information, pl

Robotics and Perception Group 391 Dec 29, 2022
AutoPentest-DRL: Automated Penetration Testing Using Deep Reinforcement Learning

AutoPentest-DRL: Automated Penetration Testing Using Deep Reinforcement Learning AutoPentest-DRL is an automated penetration testing framework based o

Cyber Range Organization and Design Chair 217 Jan 1, 2023
PPO is a very popular Reinforcement Learning algorithm at present.

PPO is a very popular Reinforcement Learning algorithm at present. OpenAI takes PPO as the current baseline algorithm. We use the PPO algorithm to train a policy to give the best action in any situation.

Rosefintech 11 Aug 23, 2021
Codes for realizing theories learned from Data Mining, Machine Learning, Deep Learning without using the present Python packages.

Codes-for-Algorithms Codes for realizing theories learned from Data Mining, Machine Learning, Deep Learning without using the present Python packages.

Tracy (Shengmin) Tao 1 Apr 12, 2022
Code for the paper Language as a Cognitive Tool to Imagine Goals in Curiosity Driven Exploration

IMAGINE: Language as a Cognitive Tool to Imagine Goals in Curiosity Driven Exploration This repo contains the code base of the paper Language as a Cog

Flowers Team 26 Dec 22, 2022
Web mining module for Python, with tools for scraping, natural language processing, machine learning, network analysis and visualization.

Pattern Pattern is a web mining module for Python. It has tools for: Data Mining: web services (Google, Twitter, Wikipedia), web crawler, HTML DOM par

Computational Linguistics Research Group 8.4k Jan 3, 2023
Uncertain natural language inference

Uncertain Natural Language Inference This repository hosts the code for the following paper: Tongfei Chen*, Zhengping Jiang*, Adam Poliak, Keisuke Sak

Tongfei Chen 14 Sep 1, 2022
NaturalProofs: Mathematical Theorem Proving in Natural Language

NaturalProofs: Mathematical Theorem Proving in Natural Language NaturalProofs: Mathematical Theorem Proving in Natural Language Sean Welleck, Jiacheng

Sean Welleck 83 Jan 5, 2023
Release of SPLASH: Dataset for semantic parse correction with natural language feedback in the context of text-to-SQL parsing

SPLASH: Semantic Parsing with Language Assistance from Humans SPLASH is dataset for the task of semantic parse correction with natural language feedba

Microsoft Research - Language and Information Technologies (MSR LIT) 35 Oct 31, 2022
The source code for the Cutoff data augmentation approach proposed in this paper: "A Simple but Tough-to-Beat Data Augmentation Approach for Natural Language Understanding and Generation".

Cutoff: A Simple Data Augmentation Approach for Natural Language This repository contains source code necessary to reproduce the results presented in

Dinghan Shen 49 Dec 22, 2022
🏆 The 1st Place Submission to AICity Challenge 2021 Natural Language-Based Vehicle Retrieval Track (Alibaba-UTS submission)

AI City 2021: Connecting Language and Vision for Natural Language-Based Vehicle Retrieval ?? The 1st Place Submission to AICity Challenge 2021 Natural

null 82 Dec 29, 2022
CLIP: Connecting Text and Image (Learning Transferable Visual Models From Natural Language Supervision)

CLIP (Contrastive Language–Image Pre-training) Experiments (Evaluation) Model Dataset Acc (%) ViT-B/32 (Paper) CIFAR100 65.1 ViT-B/32 (Our) CIFAR100 6

Myeongjun Kim 52 Jan 7, 2023
Train an RL agent to execute natural language instructions in a 3D Environment (PyTorch)

Gated-Attention Architectures for Task-Oriented Language Grounding This is a PyTorch implementation of the AAAI-18 paper: Gated-Attention Architecture

Devendra Chaplot 234 Nov 5, 2022
Implementation of EMNLP 2017 Paper "Natural Language Does Not Emerge 'Naturally' in Multi-Agent Dialog" using PyTorch and ParlAI

Language Emergence in Multi Agent Dialog Code for the Paper Natural Language Does Not Emerge 'Naturally' in Multi-Agent Dialog Satwik Kottur, José M.

Karan Desai 105 Nov 25, 2022
🤗 Transformers: State-of-the-art Natural Language Processing for Pytorch, TensorFlow, and JAX.

English | 简体中文 | 繁體中文 State-of-the-art Natural Language Processing for Jax, PyTorch and TensorFlow ?? Transformers provides thousands of pretrained mo

Hugging Face 77.2k Jan 2, 2023
Implementation of EMNLP 2017 Paper "Natural Language Does Not Emerge 'Naturally' in Multi-Agent Dialog" using PyTorch and ParlAI

Language Emergence in Multi Agent Dialog Code for the Paper Natural Language Does Not Emerge 'Naturally' in Multi-Agent Dialog Satwik Kottur, José M.

Karan Desai 105 Nov 25, 2022
Deep Learning for Natural Language Processing SS 2021 (TU Darmstadt)

Deep Learning for Natural Language Processing SS 2021 (TU Darmstadt) Task Training huge unsupervised deep neural networks yields to strong progress in

null 2 Aug 5, 2022