做项目的招聘网站,wordpress导航图片尺寸,做娱乐网站被坑,wordpress后台运行慢appium的基本使用 一、appium的基本使用appium环境安装1、安装Android SDK 2、安装Appium3、安装手机模拟器4、Pycharm安装 appium-python-alicent5、连接appium和模拟器6、Python代码调用appium软件#xff0c;appium软件在通过adb命令调用android操作系统#xff08;模拟器… appium的基本使用 一、appium的基本使用appium环境安装1、安装Android SDK 2、安装Appium3、安装手机模拟器4、Pycharm安装 appium-python-alicent5、连接appium和模拟器6、Python代码调用appium软件appium软件在通过adb命令调用android操作系统模拟器/真机appium的使用流程1、 Appium Python API地址2、准备工作Appium 服务器初始化参数Android 独有iOS 独有 3、启动参数配置及启动APPAPP包名获取 启动时碰到的坑解决步骤4、appium的功能介绍1三种模式Simple简单模式Advanced高级模式Presets预设可以存放已配置好的配置直接用就可 2启动界面 一、appium的基本使用
appium环境安装
1、安装Android SDK
1配置环境变量
用户变量的path添加以下三个路径 %ANDROID_HOME%\build-tools\31.0.0 %ANDROID_HOME%\platform-tools %ANDROID_HOME%\tools 变量名ANDROID_HONE 变量值安装的具体路径
2cmd中输入android和adb来查看是否安装成功
2、安装Appium
全点下一步就行
3、安装手机模拟器
个人安装的是夜神模拟器【目前换成雷电了感觉雷电更好用】
4、Pycharm安装 appium-python-alicent
终端里输入pip install Appium-Python-Client
5、连接appium和模拟器
有的模拟器会自动连上雷电模拟器打开后可以自动连接appium如果需要手动连接可尝试以下操作 第一步模拟器中打开“开发者选项”设置-关于手机-版本号连点五次版本号就可以打开 第二步打开USB调试模式 第二步cmd命令 运行 adb connect 127.0.0.1:xxx 模拟器运行的端口 连接中碰见的问题 问题error: protocol fault (couldn‘t read status): Connection reset by peer则说明端口号被占用5037是adb的默认端口号 解决方法查看哪个程序占用了adb端口结束这个程序然后重启adb 解决步骤
1使用命令netstat -aon|findstr “5037” 找到占用5037端口的进程PID。 - 2使用命令tasklist|findstr “30312” 通过PID找出进程。 3使用命令taskkill /pid 30312 /f 通过PID关闭进程。 4使用命令:adb start-server 启动adb就行了 最后再dbc devices 查看一下是否连上了
6、Python代码调用appium软件appium软件在通过adb命令调用android操作系统模拟器/真机
appium的使用流程
1、 Appium Python API地址
Appium Python API 中文版https://testerhome.com/topics/3711 appium官方文档地址http://appium.io/docs/cn/about-appium/intro/#_1
2、准备工作
1appium启动2连接手机或者启动模拟器3通过adb命令查看设备是否已连接4启动参数配置
Appium 服务器初始化参数
键描述值automationName自动化测试的引擎Appium 默认或者 SelendroidplatformName使用的手机操作系统iOS, Android, 或者 FirefoxOSplatformVersion手机操作系统的版本例如 7.1, 4.4deviceName使用的手机或模拟器类型iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4, 等等… 在 iOS 上使用 Instruments 的 instruments -s devices 命令可返回一个有效的设备的列表。在 Andorid 上虽然这个参数目前已被忽略但仍然需要添加上该参数app本地绝对路径_或_远程 http URL 所指向的一个安装包.ipa,.apk,或 .zip 文件。Appium 将其安装到合适的设备上。请注意如果您指定了 appPackage 和 appActivity 参数见下文Android 则不需要此参数了。该参数也与 browserName 不兼容。/abs/path/to/my.apk 或 http://myapp.com/app.ipabrowserName做自动化时使用的浏览器名字。如果是一个应用则只需填写个空的字符串‘Safari’ 对应 iOS‘Chrome’, ‘Chromium’, 或 ‘Browser’ 则对应 AndroidnewCommandTimeout用于客户端在退出或者结束 session 之前Appium 等待客户端发送一条新命令所花费的时间秒为单位例如 60language(Sim/Emu-only) 为模拟器设置语言例如 frlocale(Sim/Emu-only) 为模拟器设置所在区域例如 fr_CAudid连接真机的唯一设备号例如 1ae203187fc012gorientation(Sim/Emu-only) 模拟器当前的方向竖屏 或 横屏autoWebview直接转换到 Webview 上下文context。默认值为 false true, falsenoReset在当前 session 下不会重置应用的状态。默认值为 false true, falsefullReset(iOS)删除所有的模拟器文件夹。(Android) 要清除 app 里的数据请将应用卸载才能达到重置应用的效果。在 Android, 在 session 完成之后也会将应用卸载掉。默认值为 false true, false
Android 独有
键描述值appActivityActivity 的名字是指从你的包中所要启动的 Android acticity。他通常需要再前面添加. 例如 使用 .MainActivity 代替 MainActivityMainActivity, .SettingsappPackage运行的 Android 应用的包名com.example.android.myApp, com.android.settingsappWaitActivity用于等待启动的 Android Activity 名称SplashActivityappWaitPackage用于等待启动的 Android 应用的包com.example.android.myApp, com.android.settingsappWaitDuration用于等待 appWaitActivity 启动的超时时间以毫秒为单位默认值为 20000)30000deviceReadyTimeout用于等待模拟器或真机准备就绪的超时时间5androidCoverage用于执行测试的 instrumentation 类。传送 -w 参数到如下命令 adb shell am instrument -e coverage true -w com.my.Pkg/com.my.Pkg.instrumentation.MyInstrumentationenablePerformanceLogging仅适用于 Chrome 与 webview开启 Chromedriver 的性能日志。默认值为 falsetrue, falseandroidDeviceReadyTimeout用于等待设备在启动应用后准备就绪的超时时间。以秒为单位。例如 30androidInstallTimeout用于等待在设备中安装 apk 所花费的时间以毫秒为单位。默认值为 90000例如 90000adbPort用来连接 ADB 服务器的端口默认值为 50375037androidDeviceSocket开发工具的 socket 名称。只有在被测应用是一个使用 Chromium 内核的浏览器时才需要。socketavd被启动 avd 的名字例如 api19avdLaunchTimeout用于等待 avd 启动并连接 ADB 的超时时间以毫秒为单位默认值为 120000。300000avdReadyTimeout用于等待 avd 完成启动动画的超时时间以毫秒为单位默认值为 120000。300000avdArgs启动 avd 时使用的额外参数例如 -netfastuseKeystore使用自定义的 keystore 给 apk 签名默认值为 falsetrue或falsekeystorePath自定义 keystore 的路径, 默认路径为 ~/.android/debug.keystore例如 /path/to.keystorekeystorePassword自定义 keystore 的密码例如 fookeyAliaskey 的别名例如 androiddebugkeykeyPasswordkey 的密码例如 foochromedriverExecutablewebdriver 可执行文件的绝对路径如果 Chromium 内嵌一个自己提供的 webdriver则应使用他去替换掉 Appium 自带的 chromedriver/abs/path/to/webdriverautoWebviewTimeout用于等待 Webview 上下文context激活的时间以毫秒为单位。默认值为 2000例如 4intentAction用于启动 activity 的 intent action默认值为 android.intent.action.MAIN)例如 android.intent.action.MAIN, android.intent.action.VIEWintentCategory用于启动 activity 的 intent category。默认值为 android.intent.category.LAUNCHER) 例如 android.intent.category.LAUNCHER, android.intent.category.APP_CONTACTSintentFlags用于启动 activity 的标识flags默认值为 0x10200000例如 0x10200000optionalIntentArguments用于启动 activity 的额外 intent 参数。请查看 Intent 参数例如 --esn EXTRA_KEY, --ez EXTRA_KEY EXTRA_BOOLEAN_VALUE, 等等。dontStopAppOnReset在使用 adb 启动应用之前不要终止被测应用的进程。如果被测应用是被其他钩子(anchor)应用所创建的设置该参数为 false 后就允许钩子(anchor)应用的进程在使用 adb 启动被测应用期间仍然存在。换而言之设置 dontStopAppOnReset 为 true 后我们在 adb shell am start 的调用中不需要包含 -S标识flag。忽略该 capability 或 设置为 false 的话就需要包含 -S 标识flag。默认值为 falsetrue或falseunicodeKeyboard使用 Unicode 输入法。 默认值为 falsetrue或falseresetKeyboard在设定了 unicodeKeyboard 关键字的 Unicode 测试结束后重置输入法到原有状态。如果单独使用将会被忽略。默认值为 falsetrue或falsenoSign跳过检查和对应用进行 debug 签名的步骤。仅适用于 UiAutomator不适用于 selendroid。 默认值为 falsetrue或falseignoreUnimportantViews调用 uiautomator 的函数 setCompressedLayoutHierarchy()。由于 Accessibility 命令在忽略部分元素的情况下执行速度会加快这个关键字能加快测试执行的速度。被忽略的元素将不能够被找到因此这个关键字同时也被实现成可以随时改变的 设置 ( settings )。 默认值为 falsetrue 或 falsedisableAndroidWatchers禁用 android 监视器watchers。监视器用于见识应用程序的无响应状态anr和崩溃crash禁用会降低 Android 设备或模拟器的 CPU 使用率。该 capability 仅在使用 UiAutomator 时有效不适用于 selendroid默认设置为 false。true 或 falsechromeOptions允许对 ChromeDriver 传 chromeOptions 的参数。了解更多信息请查阅 chromeOptionschromeOptions: {args: [‘–disable-popup-blocking’]}recreateChromeDriverSessions当移除非 ChromeDriver webview时终止掉 ChromeDriver 的 session。默认设置为 falsetrue或falsenativeWebScreenshot在 web 的上下文context使用原生native的方法去截图而不是用过代理的 ChromeDriver。默认值为 falsetrue或falseandroidScreenshotPath在设备中截图被保存的目录名。默认值为 /data/local/tmp例如 /sdcard/screenshots/autoGrantPermissions让Appium自动确定您的应用需要哪些权限并在安装时将其授予应用。默认设置为 falsetrue或false
iOS 独有
键描述值calendarFormat仅支持模拟器 为iOS的模拟器设置日历格式例如 gregorianbundleId被测应用的 bundle ID 。用于在真实设备中启动测试也用于使用其他需要 bundle ID 的关键字启动测试。在使用 bundle ID 在真实设备上执行测试时你可以不提供 app 关键字但你必须提供 udid 。例如 io.appium.TestAppudid连接的真实设备的唯一设备编号 (Unique device identifier)例如 1ae203187fc012glaunchTimeout以毫秒为单位在 Appium 运行失败之前设置一个等待 instruments 的时间例如 20000locationServicesEnabled仅支持模拟器强制打开或关闭定位服务。默认值是保持当前模拟器的设定.true或falselocationServicesAuthorized仅支持模拟器通过修改 plist 文件设定是否允许应用使用定位服务从而避免定位服务的警告出现。默认值是保持当前模拟器的设定。请注意在使用这个关键字时你同时需要使用 bundleId 关键字来发送你的应用的 bundle ID。true或falseautoAcceptAlerts当警告弹出的时候都会自动去点接受。包括隐私访问权限的警告例如 定位联系人照片。默认值为 false。不支持基于 XCUITest 的测试。true或falseautoDismissAlerts当警告弹出的时候都会自动去点取消。包括隐私访问权限的警告例如 定位联系人照片。默认值为 false。不支持基于 XCUITest 的测试。true或falsenativeInstrumentsLib使用原生 intruments 库即关闭 instruments-without-delay。true或falsenativeWebTap仅支持模拟器在Safari中允许“真实的非基于 javascript 的 web 点击 (tap) 。 默认值false。注意取决于 viewport 大小/比例 点击操作不一定能精确地点中对应的元素。true或falsesafariInitialUrl仅支持模拟器 ( 8.1) 初始化 safari 的时使用的地址。默认是一个本地的欢迎页面例如 https://www.github.comsafariAllowPopups仅支持模拟器允许 javascript 在 Safari 中创建新窗口。默认保持模拟器当前设置。true或falsesafariIgnoreFraudWarning仅支持模拟器阻止 Safari 显示此网站可能存在风险的警告。默认保持浏览器当前设置。true或falsesafariOpenLinksInBackground仅支持模拟器Safari 是否允许链接在新窗口打开。默认保持浏览器当前设置。true或falsekeepKeyChains仅支持模拟器当 Appium 会话开始/结束时是否保留存放密码存放记录 (keychains) 库(Library)/钥匙串(Keychains))true或falselocalizableStringsDir从哪里查找本地化字符串。默认值为 en.lproj en.lprojprocessArguments通过 instruments 传递到 AUT 的参数例如 -myflaginterKeyDelay以毫秒为单位按下每一个按键之间的延迟时间例如 100showIOSLog是否在 Appium 的日志中显示设备的日志。默认值为 falsetrue或falsesendKeyStrategy输入文字到文字框的策略。模拟器默认值oneByOne(一个接着一个)。真实设备默认值grouped (分组输入)oneByOne, grouped或setValuescreenshotWaitTimeout以秒为单位生成屏幕截图的最长等待时间。默认值为10例如 5waitForAppScript用于判断 应用是否被启动” 的 iOS 自动化脚本代码。默认情况下系统等待直到页面内容非空。结果必须是布尔类型。例如 true;, target.elements().length 0;, $.delay(5000); true;webviewConnectRetries用于获取 webview 失败时发送连接信息到远程调试器的次数。默认次数为: 8例如 12appName被测应用的名字。 用于支持 iOS 9 以上系统的应用的自动化。例如 UICatalogcustomSSLCert(Sim/Emu-only) 给模拟器添加一个 SSL 证书。例如-----BEGIN CERTIFICATE----- MIIFWjCCBEKg… -----END CERTIFICATE-----
3、启动参数配置及启动APP
app启动参数及启动app的完整代码
from appium.webdriver import Remote #引入打开软件的包#app的启动参数
desired_cap{platformName:Android, #手机系统platformVersion: 7.1.2, #手机系统版本deviceName:HUAWEI, #手机的名字不会进行校验但是没有会报错automationName:UiAutomator2,#自动化测试框架 1.4以上的appium不用写appPackage:com.taobao.taobao,#app包名appActivity:com.taobao.tao.welcome.Welcome,#app的启动页面
}driver Remote(command_executorhttp://127.0.0.1:4723/wd/hub,desired_capabilitiesdesired_cap)
APP包名获取
第一步打开apk所在的文件夹文件夹的路径上输入cmd回车
#aapt:安卓资源打包工具
aapt dump badging app应用.apk #apk的名字最好是英文否则会出问题
例如aapt dump badging taobao.apk启动时碰到的坑
错误提示
D:\pycharm\Python\Scripts\python.exe C:/Users/Wheat/PycharmProjects/pythonProject/app_01day_project/demo1_appium入门.py
Traceback (most recent call last):File D:\pycharm\Python\lib\site-packages\urllib3\connection.py, line 175, in _new_conn(self._dns_host, self.port), self.timeout, **extra_kwFile D:\pycharm\Python\lib\site-packages\urllib3\util\connection.py, line 96, in create_connectionraise errFile D:\pycharm\Python\lib\site-packages\urllib3\util\connection.py, line 86, in create_connectionsock.connect(sa)
ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝无法连接。During handling of the above exception, another exception occurred:Traceback (most recent call last):File D:\pycharm\Python\lib\site-packages\urllib3\connectionpool.py, line 706, in urlopenchunkedchunked,File D:\pycharm\Python\lib\site-packages\urllib3\connectionpool.py, line 394, in _make_requestconn.request(method, url, **httplib_request_kw)File D:\pycharm\Python\lib\site-packages\urllib3\connection.py, line 239, in requestsuper(HTTPConnection, self).request(method, url, bodybody, headersheaders)File C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\http\client.py, line 1262, in requestself._send_request(method, url, body, headers, encode_chunked)File C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\http\client.py, line 1308, in _send_requestself.endheaders(body, encode_chunkedencode_chunked)File C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\http\client.py, line 1257, in endheadersself._send_output(message_body, encode_chunkedencode_chunked)File C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\http\client.py, line 1028, in _send_outputself.send(msg)File C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\http\client.py, line 968, in sendself.connect()File D:\pycharm\Python\lib\site-packages\urllib3\connection.py, line 205, in connectconn self._new_conn()File D:\pycharm\Python\lib\site-packages\urllib3\connection.py, line 187, in _new_connself, Failed to establish a new connection: %s % e
urllib3.exceptions.NewConnectionError: urllib3.connection.HTTPConnection object at 0x00000168E72F4588: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝无法连接。During handling of the above exception, another exception occurred:Traceback (most recent call last):File C:/Users/Wheat/PycharmProjects/pythonProject/app_01day_project/demo1_appium入门.py, line 13, in moduledriver Remote(command_executorhttp://127.0.0.1:4444/wd/hub,desired_capabilitiesdesired_cap)File D:\pycharm\Python\lib\site-packages\appium\webdriver\webdriver.py, line 274, in __init__AppiumConnection(command_executor, keep_alivekeep_alive), desired_capabilities, browser_profile, proxyFile D:\pycharm\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py, line 268, in __init__self.start_session(capabilities, browser_profile)File D:\pycharm\Python\lib\site-packages\appium\webdriver\webdriver.py, line 364, in start_sessionresponse self.execute(RemoteCommand.NEW_SESSION, parameters)File D:\pycharm\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py, line 422, in executeresponse self.command_executor.execute(driver_command, params)File D:\pycharm\Python\lib\site-packages\selenium\webdriver\remote\remote_connection.py, line 421, in executereturn self._request(command_info[0], url, bodydata)File D:\pycharm\Python\lib\site-packages\selenium\webdriver\remote\remote_connection.py, line 443, in _requestresp self._conn.request(method, url, bodybody, headersheaders)File D:\pycharm\Python\lib\site-packages\urllib3\request.py, line 79, in requestmethod, url, fieldsfields, headersheaders, **urlopen_kwFile D:\pycharm\Python\lib\site-packages\urllib3\request.py, line 170, in request_encode_bodyreturn self.urlopen(method, url, **extra_kw)File D:\pycharm\Python\lib\site-packages\urllib3\poolmanager.py, line 375, in urlopenresponse conn.urlopen(method, u.request_uri, **kw)File D:\pycharm\Python\lib\site-packages\urllib3\connectionpool.py, line 796, in urlopen**response_kwFile D:\pycharm\Python\lib\site-packages\urllib3\connectionpool.py, line 796, in urlopen**response_kwFile D:\pycharm\Python\lib\site-packages\urllib3\connectionpool.py, line 796, in urlopen**response_kwFile D:\pycharm\Python\lib\site-packages\urllib3\connectionpool.py, line 756, in urlopenmethod, url, errore, _poolself, _stacktracesys.exc_info()[2]File D:\pycharm\Python\lib\site-packages\urllib3\util\retry.py, line 574, in incrementraise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host127.0.0.1, port4444): Max retries exceeded with url: /wd/hub/session (Caused by NewConnectionError(urllib3.connection.HTTPConnection object at 0x00000168E72F4588: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝无法连接。))Process finished with exit code 1
解决步骤
第一步
driver Remote(command_executorhttp://127.0.0.1:4723/wd/hub,desired_capabilitiesdesired_cap)
command_executor的端口号一定要与appium上给你一致这样就解决一部分的bug了 第二步 Encountered internal error running command: Error: activity and pkg are required to start an application 原因启动参数的名称写错了 正确的应该是 “appActivity”
4、appium的功能介绍
1三种模式
Simple简单模式 Edit Configurations可以配置android sdk和Java sdk的环境地址如果之前已经配置好会有默认的地址
Advanced高级模式 Presets预设可以存放已配置好的配置直接用就可
2启动界面 如果某处有id元素id值是唯一的所以可用id去进行定位
发送秘钥对文本框进行输入 清空清空文本框里的内容