python appium环境搭建
python + appium 环境配置
环境搭建
1. python环境
-
下载安装python。将 pip.exe 和 python.exe 所在路径添加到环境变量:Path:
-
D:\AZ\python3\python_install\Scripts;D:\AZ\python3\python_install
-
-
安装python库:
pip install Appium-Python-Client
-
环境检查:
-
C:\Users\wztshine>python --version Python 3.7.1 C:\Users\wztshine>pip --version pip 20.1 from d:\az\python3\python_install\lib\site-packages\pip (python 3.7)
-
2. node.js环境
-
下载安装node.js,通常安装完成后它会自动添加到环境变量:Path:
-
C:\Users\wztshine\AppData\Roaming\npm;D:\AZ\nodeJS\
-
-
环境检查:
-
C:\Users\wztshine>npm Usage: npm <command> where <command> is one of: access, adduser, audit, bin, bugs, c, cache, ci, cit, clean-install, clean-install-test, completion, config, create, ddp, dedupe, deprecate, dist-tag, docs, doctor, edit, explore, fund, get, help, help-search, hook, i, init, install, install-ci-test, install-test, it, link, list, ln, login, logout, ls, org, outdated, owner, pack, ping, prefix, profile, prune, publish, rb, rebuild, repo, restart, root, run, run-script, s, se, search, set, shrinkwrap, star, stars, start, stop, t, team, test, token, tst, un, uninstall, unpublish, unstar, up, update, v, version, view, whoami npm <command> -h quick help on <command> npm -l display full usage info npm help <term> search for help on <term> npm help npm involved overview Specify configs in the ini-formatted file: C:\Users\wztshine\.npmrc or on the command line via: npm <command> --key value Config info can be viewed via: npm help config npm@6.14.6 D:\AZ\nodeJS\node_modules\npm
-
3. 安装 JDK
-
下载安装jdk,配置 jdk 和 jre 的环境变量:JAVA_HOME,CLASSPATH,Path
JAVA_HOME D:\Software\jdk1.8 CLASSPATH %JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar Path %JAVA_HOME%\bin %JAVA_HOME%\jre\bin
-
环境检查:
-
C:\Users\wztshine>java 用法: java [-options] class [args...] (执行类) 或 java [-options] -jar jarfile [args...] (执行 jar 文件) 其中选项包括: -d32 使用 32 位数据模型 (如果可用) -d64 使用 64 位数据模型 (如果可用) -server 选择 "server" VM 默认 VM 是 server. -cp <目录和 zip/jar 文件的类搜索路径> -classpath <目录和 zip/jar 文件的类搜索路径> 用 ; 分隔的目录, JAR 档案 和 ZIP 档案列表, 用于搜索类文件。 -D<名称>=<值> 设置系统属性 -verbose:[class|gc|jni] 启用详细输出 -version 输出产品版本并退出 -version:<值> 警告: 此功能已过时, 将在 未来发行版中删除。 需要指定的版本才能运行 -showversion 输出产品版本并继续 -jre-restrict-search | -no-jre-restrict-search 警告: 此功能已过时, 将在 未来发行版中删除。 在版本搜索中包括/排除用户专用 JRE -? -help 输出此帮助消息 -X 输出非标准选项的帮助 -ea[:<packagename>...|:<classname>] -enableassertions[:<packagename>...|:<classname>] 按指定的粒度启用断言 -da[:<packagename>...|:<classname>] -disableassertions[:<packagename>...|:<classname>] 禁用具有指定粒度的断言 -esa | -enablesystemassertions 启用系统断言 -dsa | -disablesystemassertions 禁用系统断言 -agentlib:<libname>[=<选项>] 加载本机代理库 <libname>, 例如 -agentlib:hprof 另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help -agentpath:<pathname>[=<选项>] 按完整路径名加载本机代理库 -javaagent:<jarpath>[=<选项>] 加载 Java 编程语言代理, 请参阅 java.lang.instrument -splash:<imagepath> 使用指定的图像显示启动屏幕 有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。 C:\Users\wztshine>javac 用法: javac <options> <source files> 其中, 可能的选项包括: -g 生成所有调试信息 -g:none 不生成任何调试信息 -g:{lines,vars,source} 只生成某些调试信息 -nowarn 不生成任何警告 -verbose 输出有关编译器正在执行的操作的消息 -deprecation 输出使用已过时的 API 的源位置 -classpath <路径> 指定查找用户类文件和注释处理程序的位置 -cp <路径> 指定查找用户类文件和注释处理程序的位置 -sourcepath <路径> 指定查找输入源文件的位置 -bootclasspath <路径> 覆盖引导类文件的位置 -extdirs <目录> 覆盖所安装扩展的位置 -endorseddirs <目录> 覆盖签名的标准路径的位置 -proc:{none,only} 控制是否执行注释处理和/或编译。 -processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的搜索进程 -processorpath <路径> 指定查找注释处理程序的位置 -parameters 生成元数据以用于方法参数的反射 -d <目录> 指定放置生成的类文件的位置 -s <目录> 指定放置生成的源文件的位置 -h <目录> 指定放置生成的本机标头文件的位置 -implicit:{none,class} 指定是否为隐式引用文件生成类文件 -encoding <编码> 指定源文件使用的字符编码 -source <发行版> 提供与指定发行版的源兼容性 -target <发行版> 生成特定 VM 版本的类文件 -profile <配置文件> 请确保使用的 API 在指定的配置文件中可用 -version 版本信息 -help 输出标准选项的提要 -A关键字[=值] 传递给注释处理程序的选项 -X 输出非标准选项的提要 -J<标记> 直接将 <标记> 传递给运行时系统 -Werror 出现警告时终止编译 @<文件名> 从文件读取选项和文件名
-
4. android sdk 安装
- 下载解压andrid sdk,配置环境变量 ANDROID_HOME,Path
ANDROID_HOME:D:\AZ\android_sdk
Path: %ANDROID_HOME%\platform-tools; %ANDROID_HOME%\tools;
-
环境检查:
可以通过USB插上安卓手机,打开手机的开发者选项。
C:\Users\wztshine>adb devices
List of devices attached
443ddcb8 device
5. 安装 appium
- 下载appium:https://bitbucket.org/appium/appium.app/downloads/
- 添加到环境变量Path
D:\AZ\Appium\node_modules\.bin
- 环境检查:
C:\Users\wztshine>appium-doctor
Running Android Checks
✔ ANDROID_HOME is set to "D:\AZ\android_sdk"
✔ JAVA_HOME is set to "D:\AZ\jdk1.8."
✔ ADB exists at D:\AZ\android_sdk\platform-tools\adb.exe
✔ Android exists at D:\AZ\android_sdk\tools\android.bat
✔ Emulator exists at D:\AZ\android_sdk\tools\emulator.exe
✔ Android Checks were successful.
✔ All Checks were successful
编写脚本
import unittest
from appium import webdriver
class Test_Settings(unittest.TestCase):
desired_caps = {'platformName': 'Android', # 平台名称
'platformVersion': '10', # 系统版本号
'deviceName': '39504f3231593398', # 设备名称。adb devices出来的东西
'appPackage': 'com.android.settings', # apk的包名
'appActivity': 'com.android.settings.Settings', # activity 名称
'automationName': 'UiAutomator1',
'noReset': True,
'fullReset': False,
'unicodeKeyboard': True,
'resetKeyboard': True
}
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 连接Appium
def test_screen(self):
self.driver.get_screenshot_as_file(r'C:\Users\wztshine\Desktop\PUA\ph.png')
if __name__ == '__main__':
unittest.main(verbosity=2)
附录:异常
1. 启动脚本后,总是自动安装Unlock,Appium Settings等app,并且需要手动确认。
用//
注释掉文件 Appium\node_modules\appium\lib\devices\android\android.js 里面的两句话
// this.pushSettingsApp.bind(this),
// this.pushUnlock.bind(this),
2. 出错信息里含有"ps 'uiautomator',
如:A new session could not be created. (Original error: Command failed: C:\Windows\system32\cmd.exe /s /c "C:\Users\sxie\AppData\Local\Android\sdk\platform-tools\adb.exe -s emulator-5554 shell "ps 'uiautomator'""
打开Appium\node_modules\appium\node_modules\appium-adb\lib\adb.js文件,将
this.shell("ps '" + name + "'", function (err, stdout) {
if (err) return cb(err);
替换成
this.shell_grep("ps", name, function (err, stdout) {
if (err) {
logger.debug("No matching processes found");
return cb(null, []);
}
并在当前函数上方,添加一个新函数:
ADB.prototype.shell_grep = function (cmd, grep, cb) {
if (cmd.indexOf('"') === -1) {
cmd = '"' + cmd + '"';
}
var execCmd = 'shell ' + cmd + '| grep ' + grep;
this.exec(execCmd, cb);
};
3. 错误:Could not sign with default certificate.
以管理员身份运行Appium