Giter Site home page Giter Site logo

qt4i's Introduction

QT4i

License Build Status PyPi version Documentation Status GitHub tag

QT4i (Quick Test for iOS) is a QTA test automation driver for iOS application.

Features

  • Easy to use, only Apple developer certificate is needed, no jailbreak or test stub is required
  • Support native, web and custom controls with Accessibility
  • Support iOS device and simulator, and multiple devices can be used simultaneously in a test
  • Low maintenance costs with QTA UI test automation framework

QT4i should be used with QTAF, please check it first.

Get Started

Check out our Usage Document to get going with QT4i. There is also sample code that shows how to run testcase with QT4i.

Anatomy

If you are interested in anatomy of QT4i, the Design Document may be useful to you.


QT4i(Quick Test for iOS),基于QTA提供面向iOS应用的UI测试自动化测试解决方案。

主要特性

  • 轻松易用——无需越狱,无需插桩,只要是开发者证书编译的版本即可进行测试
  • 强大引擎——支持iOS Native控件、webview控件和自定义控件
  • 平台支持——全面兼容iOS真机和模拟器,基于分布式技术,高效并发执行测试
  • 高效维护——基于QPath技术和QTAFUI框架,降低产品变化的脚本维护投入

QT4i需要和QTAF一起使用,请先参考QTAF的使用

入门指南

请查看我们的使用文档以便您快速上手QT4i,同时可以参考我们的示例代码

框架原理

如果你对QT4i的实现原理感兴趣,可以参考我们的设计文档


欢迎加入QQ群(432699528)交流使用和反馈

image

qt4i's People

Contributors

eeelin avatar hellertang avatar jerryginger avatar

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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

qt4i's Issues

执行命令 python3.6 manage.py qt4i.setup 失败

以下是报错信息:

Traceback (most recent call last):
  File "manage.py", line 24, in <module>
    ManagementTools().run()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/testbase/management.py", line 687, in run
    cmds = self._load_cmds()
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/testbase/management.py", line 640, in _load_cmds
    cmds += self._load_cmd_from_module(sys.modules[__name__])
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/testbase/management.py", line 663, in _load_cmd_from_module
    cmds.sort(lambda x, y:cmp_func(x.name, y.name))
TypeError: must use keyword argument for key function


brew tap facebook/fb执行失败

https://qt4i.readthedocs.io/zh_CN/latest/intro.html
快速入门的指令:$ brew tap facebook/fb
执行结果:
Cloning into '/usr/local/Homebrew/Library/Taps/fackbook/homebrew-fb'...
Username for 'https://github.com': xxx
Password for 'https://[email protected]':
remote: Repository not found.
fatal: repository 'https://github.com/fackbook/homebrew-fb/' not found
Error: Failure while executing; git clone https://github.com/fackbook/homebrew-fb /usr/local/Homebrew/Library/Taps/fackbook/homebrew-fb --depth=1 exited with 128.

因为https://github.com/fackbook/homebrew-fb,404

执行不了 setup.py

/Library/Python/2.7/site-packages/distribute-0.6.28-py2.7.egg/setuptools/command/install_scripts.py:3: UserWarning: Module main was already imported from setup.py, but /Library/Python/2.7/site-packages is being added to sys.path
from pkg_resources import Distribution, PathMetadata, ensure_directory
qt4i
usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
or: setup.py --help [cmd1 cmd2 ...]
or: setup.py --help-commands
or: setup.py cmd --help

error: no commands supplied

UISpy找不到QPath

UISpy显示QPath几乎都是空的,控件查找效率过低,应该怎么切换到wda原生的xpath? wda原生的inspector功能是被去掉了吗?打不开

qt4i-manage listdevices 报错

$ qt4i-manage listdevices
Traceback (most recent call last):
File "/Users/mac/.local/bin/qt4i-manage", line 10, in
sys.exit(qt4i_manage_main())
File "/Users/mac/.local/lib/python3.7/site-packages/qt4i/cmds.py", line 241, in qt4i_manage_main
subcmd.execute(args)
File "/Users/mac/.local/lib/python3.7/site-packages/qt4i/cmds.py", line 108, in execute
for device in DT().get_devices():
File "/Users/mac/.local/lib/python3.7/site-packages/qt4i/driver/tools/dt.py", line 273, in get_devices
return self._get_device_by_fbsimctl()
File "/Users/mac/.local/lib/python3.7/site-packages/qt4i/driver/tools/dt.py", line 1003, in _get_device_by_fbsimctl
name = dev['name']
TypeError: string indices must be integers

`pip install qt4i` 执行失败

Collecting qt4i
Using cached https://files.pythonhosted.org/packages/5f/79/e2d16acbefba57015d35b8a56efd86ae1699328c4cc92ee8bf999aa9f0f8/qt4i-3.4.8.tar.gz
Requirement already satisfied: qtaf>=5.2.9 in ./Library/Python/2.7/lib/python/site-packages (from qt4i) (5.4.30)
Requirement already satisfied: six>=1.11.0 in ./Library/Python/2.7/lib/python/site-packages (from qt4i) (1.12.0)
Collecting pymobiledevice-qta (from qt4i)
Using cached https://files.pythonhosted.org/packages/02/2b/4d1dae992685390d9002cd69a260c3bf2823038bcc94a161699359a8a60a/pymobiledevice_qta-1.1.4-py2-none-any.whl
Collecting biplist (from qt4i)
Using cached https://files.pythonhosted.org/packages/3e/56/2db170a498c9c6545cda16e93c2f2ef9302da44802787b45a8a520d01bdb/biplist-1.0.3.tar.gz
Collecting websocket-client (from qt4i)
Using cached https://files.pythonhosted.org/packages/29/19/44753eab1fdb50770ac69605527e8859468f3c0fd7dc5a76dd9c4dbd7906/websocket_client-0.56.0-py2.py3-none-any.whl
Requirement already satisfied: future in ./Library/Python/2.7/lib/python/site-packages (from qt4i) (0.17.1)
Collecting qt4w (from qt4i)
Using cached https://files.pythonhosted.org/packages/65/d0/2259230f50259038bba5ead3feb636d35c32c0935cb8e3bba9c872388e77/qt4w-2.0.62.tar.gz
Requirement already satisfied: ply in ./Library/Python/2.7/lib/python/site-packages (from qtaf>=5.2.9->qt4i) (3.11)
Collecting M2Crypto==0.32.0; sys_platform == "darwin" (from pymobiledevice-qta->qt4i)
Using cached https://files.pythonhosted.org/packages/17/2b/f551dbff0f7b70746568c6546efccca128fe8651be7ad915b99e1bae15cf/M2Crypto-0.32.0.tar.gz
Collecting pyasn1 (from pymobiledevice-qta->qt4i)
Using cached https://files.pythonhosted.org/packages/7b/7c/c9386b82a25115cccf1903441bba3cbadcfae7b678a20167347fa8ded34c/pyasn1-0.4.5-py2.py3-none-any.whl
Collecting construct>=2.9.29 (from pymobiledevice-qta->qt4i)
Using cached https://files.pythonhosted.org/packages/19/c0/f054941fa33d14378de66d2c0477d31f7ad97aa2e298a5771a7b20bc2039/construct-2.9.45.tar.gz
Requirement already satisfied: typing in ./Library/Python/2.7/lib/python/site-packages (from M2Crypto==0.32.0; sys_platform == "darwin"->pymobiledevice-qta->qt4i) (3.7.4)
Installing collected packages: M2Crypto, pyasn1, construct, biplist, pymobiledevice-qta, websocket-client, qt4w, qt4i
Running setup.py install for M2Crypto ... error
ERROR: Complete output from command /usr/bin/python -u -c 'import setuptools, tokenize;file='"'"'/private/var/folders/4v/k5bkbs8x3j9fkyshtmhx7lqc0000gn/T/pip-install-_9CI3L/M2Crypto/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /private/var/folders/4v/k5bkbs8x3j9fkyshtmhx7lqc0000gn/T/pip-record-_15PGN/install-record.txt --single-version-externally-managed --compile:
ERROR: running install
running build
running build_py
copying M2Crypto/callback.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/EVP.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/AuthCookie.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/m2.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/ftpslib.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/EC.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/httpslib.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/X509.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/util.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/RSA.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/BIO.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/DH.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/init.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/threading.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/Rand.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/SMIME.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/Engine.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/m2xmlrpclib.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/RC4.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/m2urllib2.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/DSA.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/six.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/m2urllib.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/BN.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/m2crypto.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/Err.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
copying M2Crypto/ASN1.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto
creating build/lib.macosx-10.14-intel-2.7/M2Crypto/SSL
copying M2Crypto/SSL/cb.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto/SSL
copying M2Crypto/SSL/Session.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto/SSL
copying M2Crypto/SSL/timeout.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto/SSL
copying M2Crypto/SSL/init.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto/SSL
copying M2Crypto/SSL/TwistedProtocolWrapper.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto/SSL
copying M2Crypto/SSL/Cipher.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto/SSL
copying M2Crypto/SSL/Connection.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto/SSL
copying M2Crypto/SSL/Context.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto/SSL
copying M2Crypto/SSL/SSLServer.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto/SSL
copying M2Crypto/SSL/ssl_dispatcher.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto/SSL
copying M2Crypto/SSL/Checker.py -> build/lib.macosx-10.14-intel-2.7/M2Crypto/SSL
running build_ext
building 'M2Crypto._m2crypto' extension
creating build/temp.macosx-10.14-intel-2.7
creating build/temp.macosx-10.14-intel-2.7/SWIG
cc -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64 -pipe -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I/private/var/folders/4v/k5bkbs8x3j9fkyshtmhx7lqc0000gn/T/pip-install-_9CI3L/M2Crypto/SWIG -c SWIG/_m2crypto_wrap.c -o build/temp.macosx-10.14-intel-2.7/SWIG/_m2crypto_wrap.o -Wno-deprecated-declarations -DTHREADING
SWIG/_m2crypto_wrap.c:2887:9: warning: variable 'res' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
if (PyType_Ready(tp) < 0)
^~~~~~~~~~~~~~~~~~~~
SWIG/_m2crypto_wrap.c:2911:10: note: uninitialized use occurs here
return res;
^~~
SWIG/_m2crypto_wrap.c:2887:5: note: remove the 'if' if its condition is always false
if (PyType_Ready(tp) < 0)
^~~~~~~~~~~~~~~~~~~~~~~~~
SWIG/_m2crypto_wrap.c:2868:10: note: initialize the variable 'res' to silence this warning
int res;
^
= 0
SWIG/_m2crypto_wrap.c:3557:10: fatal error: 'openssl/err.h' file not found
#include <openssl/err.h>
^~~~~~~~~~~~~~~
1 warning and 1 error generated.
error: command 'cc' failed with exit status 1
----------------------------------------
ERROR: Command "/usr/bin/python -u -c 'import setuptools, tokenize;file='"'"'/private/var/folders/4v/k5bkbs8x3j9fkyshtmhx7lqc0000gn/T/pip-install-_9CI3L/M2Crypto/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /private/var/folders/4v/k5bkbs8x3j9fkyshtmhx7lqc0000gn/T/pip-record-_15PGN/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /private/var/folders/4v/k5bkbs8x3j9fkyshtmhx7lqc0000gn/T/pip-install-_9CI3L/M2Crypto/

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.