Git Product home page Git Product logo

ctripcorp / flybirds Goto Github PK

View Code? Open in Web Editor NEW
807.0 14.0 89.0 15.26 MB

基于自然语言的,跨端跨框架 BDD UI 自动化测试方案,BDD testing, Python style, Present by Trip Flight

Home Page: https://ctripcorp.github.io/flybirds/

License: MIT License

Python 94.42% JavaScript 0.31% Gherkin 5.27%
automation android ios python test-automation web bdd-style-testing-framework flutter-test testing

flybirds's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

flybirds's Issues

录屏清晰度

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.

我目前使用pl的话 默认的录屏 record-video-dir 存在两个问题
1.没法控制起始时间,比如真正打开网页的时候,默认会把加载的空白也录制进来,网络不好就会很长
2.清晰度很受限

其中的track方法能很好的解决上面两个问题,有机会我可以pr一下

failRerun 配置不生效

下列配置时,仍然会触发rerun

    "failRerun": false,
    "maxFailRerunCount": 1,
    "maxRetryCount": 1

元素定位支持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同时兼容多种定位方式

app端滑动太快导致无法查找元素

问题描述 / Describe the bug
向下查找[xx]的元素时,页面滑动太快导致要查找的元素被滑过去而无法找到

截图 / Screenshots
image

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

  • 模拟器

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

新增OCR&OpenCV DSL

  1. 支持语法:向[]扫描[]的文案
  2. 查找、点击,支持正则表达式语法
  3. 优化OCR 日志
  4. 支持语法:向[]查找[]的图像

[Feature] 项目目录外执行异常,需优化

Context

  • 项目名:my_first_project
  • 执行目录:/Users/test
  • 执行命令:flybirds run --path my_first_project/features/test/android/base_en_click.feature

错误日志

2022-01-11 10:46:26,985 - flybirds_log - INFO - find extend pkg
Exception AttributeError: 'DeviceConfig' object has no attribute 'platform'
Traceback (most recent call last):
File "/usr/local/bin/behave", line 11, in
load_entry_point('behave==1.2.6', 'console_scripts', 'behave')()
File "/usr/local/lib/python3.7/site-packages/behave/main.py", line 183, in main
return run_behave(config)

优化点

  • 增加执行前环境检查
  • 有更明确的异常信息和错误提示
  • 支持某些场景下项目目录的自动检测

web brower close error

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

问题复现步骤 / To Reproduce
C:\Python39\lib\site-packages\behave\runner.py:585: RuntimeWarning: coroutine 'Browser.close' was never awaited
statement.error_message = error_message
RuntimeWarning: Enable tracemalloc to get the object allocation traceback

预期结果 / 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 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

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

[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

能否支持多机场景,很多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.

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

问题描述 / 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]

interaction like intro.js

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.

https://introjs.com/

如果我想给flybirds-web端添加类似的效果,也就是把每一步交互的操作增加一个类似hint的东西,对应到

功能: web点击

场景: 点击元素
假如 跳转页面到[百度]
标注 在[#kw]中画框 在[#kw]下弹出提示[请输入你想要查询的关键词]
而且 在[#kw]中输入[flybirds]
而且 等待[3]秒
那么 全屏截图

有什么思路吗

我如何正常的启动它?

系统版本: masOS big Sur 11.6
python版本 : 3.8.9
pip3 install flybirds 之后 , flybirds 我无法正常启动它.

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

运行 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.

Issue 编写建议 (必读)

为了更好的解决你的问题, 建议在发表前, 先浏览以下内容。

issue

  • 提供你的系统信息(python版本,设备信息等)。
  • 提供你所使用的flybirds版本。可以对比 pypi上的版本, 看看是否为最新版, 也许你的问题在新版本中已经修复了。
  • 尽量详细描述你的问题,以及这个问题是如何出现的,最好能把 操作步骤大概说一下,以便我们能重现这个问题。可以通过截图,录屏,Console报错等方式提交更多的信息。
  • 超过 7 天未对 Contributors 的回复进行反馈的,默认将认为已解决关闭 Issue
  • 请使用提供的 Issue 模板格式发布,不符合规范的 issue,会被直接关闭
  • 提问前请确认已经查找过 flybirds 文档

最后

合理的功能、建议,欢迎大家留言讨论

OCR support

对于无法通过poco识别的页面元素,增加OCR识别方法

支持设置浏览器语言环境

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")

跳转页面到[]报错,执行该语句报错

问题描述 / Describe the bug
config/schema_url.json中已配置页面地址,跳转页面到[]报错,执行该语句报错

问题复现步骤 / To Reproduce
启动app
离开主页,进入到app其他页面
跳转页面到[指定schema-url]爆粗

预期结果 / Expected behavior
跳转到指定schema-url

截图 / Screenshots

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

  • Device: [android11]
  • OS: [macOS]
  • Browser []
  • Version [0.15]

Additional context
2022-02-18 13:38:39,021 - flybirds_log - INFO - <when "跳转页面到[qqq]">
2022-02-18 13:38:39,021 - flybirds_log - INFO - run step:跳转页面到[qqq]
2022-02-18 13:38:39,022 - flybirds_log - INFO - result_dic: {'pageName': 'qqq'}
2022-02-18 13:38:39,025 - flybirds_log - INFO - feature:失败重新运行1 scenario:验证点击--点击元素切换页面并输入 failed to run
2022-02-18 13:38:39,025 - flybirds_log - INFO - step:跳转页面到[qqq]
2022-02-18 13:38:39,025 - flybirds_log - ERROR - Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/behave/model.py", line 1329, in run
match.run(runner.context)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/behave/matchers.py", line 98, in run
self.func(context, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/flybirds/core/dsl/step/page.py", line 15, in jump_to_page
g_Context.step.jump_to_page(context, param_1)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/flybirds/core/plugin/plugins/default/android/step.py", line 39, in jump_to_page
jump_to_page(context, param)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/flybirds/core/plugin/plugins/default/step/schema.py", line 23, in jump_to_page
snippet.schema_goto(
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/flybirds/utils/snippet.py", line 67, in schema_goto
schema_rule = getattr(schema_goto_module, "schema_deal_rule")
AttributeError: module 'app.operation' has no attribute 'schema_deal_rule'

[Feature] Add web BDD UI Testing support

增加web BDD UI Testing支持

  • 通用语法与APP端保持一致
  • 支持无头、有头浏览器模式
  • 支持多种浏览器内核:chrome、firefox、webkit
  • 支持并发执行模式

flybirds 0.2.2 requires pyOpenSSL==19.1.0, but you have pyopenssl 22.0.0 which is incompatible.

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.

这个能升级吗

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

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

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

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

for循环

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.

比如一个文件列表,怎么循环获取每个的下载链接,最后保存到本地?

Hide configuration “ beforeRunLogin”

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.

录屏中文字体小方块

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.

目前的实现里我没太看懂是怎么实现的,但有一个bug
如果是unbutu系统中没有中文字符,会显示小方块,同理cjk系列的语言应该都是这样
需要文档里注明提前安装对应字体
参考录屏中的字体显示
https://www.zhihu.com/question/19911793

sudo apt-get install ttf-wqy-microhei #文泉驿-微米黑
sudo apt-get install ttf-wqy-zenhei #文泉驿-正黑
sudo apt-get install xfonts-wqy #文泉驿-点阵宋体

[Feature] 增加对异常弹窗的处理

如题,增加支持对异常弹窗进行处理:

  • 测试App版本更新弹窗
  • 测试App权限请求弹窗
  • 模拟器not responding 异常弹窗
  • 系统UI isn't responding 异常弹窗
  • 其他异常弹窗

使用交互行为录制生成文本描述

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.

进一步降低非开发人员的上手成本
在web端可以实现一次录制 多次调用

https://github.com/DeploySentinel/Recorder
https://github.com/checkly/headless-recorder

问题是移动端怎么做?抛开css selector xpath定位的 纯视觉的定位应该可以直接用?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.