GVKun编程网logo

android – 如何从Appium修复错误“无法从sw_vers输出检测Mac OS X版本:’10 .12’”

9

关于android–如何从Appium修复错误“无法从sw_vers输出检测MacOSX版本:’10.12’”的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于3分钟了解Appium:使用a

关于android – 如何从Appium修复错误“无法从sw_vers输出检测Mac OS X版本:’10 .12’”的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于3分钟了解Appium:使用appium做Android手机自动化测试!、android – Appium:如何从基于离子的混合应用程序获取WEB_VIEW?、android – Gradle依赖项导致错误“无效的Magic Number”、android – React native Appium,如何查找元素等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

android – 如何从Appium修复错误“无法从sw_vers输出检测Mac OS X版本:’10 .12’”

android – 如何从Appium修复错误“无法从sw_vers输出检测Mac OS X版本:’10 .12’”

我安装了appium-1.5.3.dmg但是当我点击听诊器按钮时,Appium显示错误:

 ✔ Xcode is installed at: /Library/Developer/CommandLinetools
[Error: Could not detect Mac OS X Version from sw_vers output: '10.12
']

谢谢!

解决方法:

它对我有用.

您可以通过此命令配置文件:

> grep -rl“无法从sw_vers输出中检测到Mac OS X版本:”/ Applications / Appium.app /

enter image description here

>终端将显示:
/Applications/Appium.app//Contents/Resources/node_modules/appium/node_modules/appium-support/build/lib/system.js
/Applications/Appium.app//Contents/Resources/node_modules/appium/node_modules/appium-support/lib/system.js
/Applications/Appium.app//Contents/Resources/node_modules/appium-support/build/lib/system.js
/Applications/Appium.app//Contents/Resources/node_modules/appium-support/lib/system.js
>使用命令vim并配置每个文件.

vim /Applications/Appium.app//Contents/Resources/node_modules/appium/node_modules/appium-support/build/lib/system.js

enter image description here

配置文件:

enter image description here

>改变自 – >

案例10:
    _arr = [’10 .8′,’10 .9′,’10 .10′,’10 .11′];
    _i = 0;

到 – >

案例10:
    _arr = [’10 .8′,’10 .9′,’10 .10′,’10 .11′,’10.12′];
    _i = 0;

vim /Applications/Appium.app//Contents/Resources/node_modules/appium/node_modules/appium-support/lib/system.js

enter image description here

配置文件:

enter image description here

>改变自 – >

尝试{
stdout =(等待exec(‘sw_vers’,[‘ – productVersion’])).stdout;
}

到 – >

尝试{
stdout =(等待exec(‘sw_vers’,[‘ – productVersion’])).stdout.trim();
}
>改变自 – >

for(let v of [’10 .8′,’10 .9′,’10 .10′,’10 .11′]){
if(stdout.indexOf(v)=== 0){return v; }
}

到 – >

for(let of of [’10 .8′,’10 .9′,’10 .10′,’10 .11′,’10.12′]){
if(stdout.indexOf(v)=== 0){return v; }
}

vim /Applications/Appium.app//Contents/Resources/node_modules/appium-support/build/lib/system.js

enter image description here

配置文件:

enter image description here

>改变自 – >

案例10:
    _arr = [’10 .8′,’10 .9′,’10 .10′,’10 .11′];
    _i = 0;

到 – >

案例10:
    _arr = [’10 .8′,’10 .9′,’10 .10′,’10 .11′,’10.12′];
    _i = 0;

vim /Applications/Appium.app//Contents/Resources/node_modules/appium-support/lib/system.js

enter image description here

配置文件:

enter image description here

>改变自 – >

尝试{
stdout =(等待exec(‘sw_vers’,[‘ – productVersion’])).stdout;
}

到 – >

尝试{
stdout =(等待exec(‘sw_vers’,[‘ – productVersion’])).stdout.trim();
}
>改变自 – >

for(let v of [’10 .8′,’10 .9′,’10 .10′,’10 .11′]){
if(stdout.indexOf(v)=== 0){return v; }
}

到 – >

for(let of of [’10 .8′,’10 .9′,’10 .10′,’10 .11′,’10.12′]){
if(stdout.indexOf(v)=== 0){return v; }
}

单击启动听诊器按钮

enter image description here

3分钟了解Appium:使用appium做Android手机自动化测试!

3分钟了解Appium:使用appium做Android手机自动化测试!

网上写Appium相关资料的文章已经多如牛毛,今天我所提到的内容或许是你不太了解的,希望能在3分钟时间为各位看官带来不一样的收获~~

Appium这个听起来既生疏也熟悉的自动化测试工具,比起原生的UiAutomator可能是异常的不起眼,可是却是有自身独当一面的能力,可以完成许多高难度作业,完成UiAutomator不可能完成的一些任务,可以说appium丰富了UiAutomator的功能,使UiAutomator可以完成更多的任务。

Appium到底有哪些优势会让我们优先选择它去做自动化呢?

一、一句话概括Appium

一款应用于移动端的自动化测试框架,支持跨平台应用,Native、Hybird、Mobile Web都支持。其特点概括一下:

跨平台只要一套代码

不需要设置签名,不污染源代码

不需要项目源代码就可以测试

多语言支持

可支持多种通用框架

完全开源,社区活跃

二、初步认识appium工作过程

1.appium有C/S模式

2.appium是基于webdriver协议对移动设备自动化api扩展而成的,所有具有和webdriver一样的特性,比如多语言支持。

3.webdriver是基于http协议的,第一连接会建立一个session会话,并通过post发送一个json告知服务端相关测试信息。

4.对于Android来说,4.2以后是基于UiAutomator框架实现查找注入事件的,4.2以前则是instrumentation框架的,并封装成一个叫Selendroid提供服务。

5.客户端只需要发送http请求实现通讯,意味着客户端就是多语言支持的。

6.appium服务端是node.js写的,所以安装那个平台都是先安装node,然后npm install -g appium(需要FQ)。

三、环境搭建

步骤:

1.java开发环境JDK

2.android SDK(platform/platform tools/tools/build tools)

3.python下载安装(pip)

4.appium下载安装(服务端+客户端)

5.安装appium-python-client

6.安装unittest

第一步

安装JDK,安装完成后配置环境变量。

cmd下java -version检查环境变量是否配置成功。

第二步

安装Android SDK(安卓软件开发包),测试Android手机必然是要安装Android SDK。

下载地址:

解压后将文件夹添加到环境变量中,添加环境变量,必须创建一个名为ANDROID_HOME的变量。

双击SDK Manager,选装工具。必装:Tools文件夹下Android SDK Platform-tools和Android SDK Build-tools,Android SDK Tools可以选择是否更新,建议网速OK直接更新。GoogleFQ安装:Extras文件夹下所有的全部安装。

Path环境变量中添加ANDROID_HOME、tools、platform-tools、build-tools目录。保存修改。

环境变量配置完成后,连接安卓手机,并将Android手机的开发者选项-USB调试打开。

在CMD下执行,adb devices,出现下图样式则代表通过adb命令,获取到了连接在电脑上Android手机的UDID。

adb devices在获取连接的安卓手机时,一定会遇到很多坑,这里我们梳理下可能会遇到的坑。

1、手机USB调试一定要打开。

2、多找两根USB线,排除线的问题。

3、多换几个USB接口,排除USB个别接口不好使问题(如:3.0 与 2.0)

4、驱动程序,通过设备管理器查看是否安装驱动或驱动不是最新。

5、更新adb_usb.ini文件,少数电脑不能识别Android手机时,可以将设备管理器下的Android手机的VID、PID增加到adb_usb.ini文件中。

将VID、PID中“_”后的4位数增加到adb_usb.ini下(注:adb_usb.ini默认在C盘当前用户家目录下的.android目录下)

理论上这些操作都操作一遍后,基本adb devices就可以找到Android手机了。

第三步

安装node.js,之后就可以直接通过npm安装Appium。(注:npm类似于Python的pip,一个非官方包管理器)

官方下载地址:

根据自己的操作系统下载不同版本的node.js

node.js的安装一路傻瓜式next就可以了,安装成功后会自动添加环境变量。

安装成功后,检测下npm是否可用。

第四步

安装appium服务端,可通过cmd 下输入 npm install -g appium 进行安装。

如果npm install -g appium特别慢,无法下载时,可以用国内的镜像npm --registry install -g appium

安装如果失败可以尝试通过cnpm安装appium

通过npm命令安装cnpm

npm install -g cnpm --registry=

通过cnpm安装appium

cnpm install -g appium --no-cache

安装成功后,通过appium -v 查看当前appium版本,直接输入appium则启动appium server端。

如果仍无法下载appium服务端,那就只能在Appium官方网站上下载操作系统相应的Appium版本。

 

当前最新版本为 AppiumForWindows_1_4_16_1.zip ,注意这是一个 Windows 版本,如果你的电脑为MAC请下载 appium-1.5.3.dmg 。

再来提供一个百度网盘的下载链接:

我们以 Windows 为例,将下载的 AppiumForWindows.zip 进行解压,点击 appium-installer.exe 进行安装。

双击启动,appium server 界面如下。

最后,打开Windows命令提示符,输入“appium-doctor”命令,如果出现以下提示,说明你Appium所需要的各项环境都已准备完成。

注:如果提示:“appium-doctor”不是内部或外部命令,找到Appium的安装目录,例如:

C:\Program Files\Appium\node_modules\.bin

添加到环境变量path下面。

第五步

安装appium客户端,用于抓取app上定位信息。

双击安装,安装成功后左面会有一个appium的快捷方式。

到这里Windows-Android-appium的所有环境就已经搭建完成了。

总结:

Appium目前是一种比较先进的测试工具,可以覆盖到UiAutomator所涉及的各个方面,还能完成webview的自动化测试,但是部署环境较复杂,而且出现很多的异常情况很难去定位到问题,同时网上资料也比较匮乏,导致其普及范围不是很广,希望这篇文章可以帮助需要用到appium工具的同学,快速越过搭建环境这一关,快速投入到混合型App的自动化测试当中。


上面是我收集的一些视频和面试题资料。

对于软件测试的的朋友来说应该是最全面最完整的面试备战仓库,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你

关注我的微信公众号【程序员二黑】免费获取
 

android – Appium:如何从基于离子的混合应用程序获取WEB_VIEW?

android – Appium:如何从基于离子的混合应用程序获取WEB_VIEW?

我使用离子框架开发了一个混合应用程序.现在是时候测试我的应用了,所以我选择了appium来自动化它.我已经准备好appium设置,我的设备安装在我的设备中通过USB连接.

我编写了一个示例测试来点击登录按钮并将密钥发送到必需的字段,如email和pwd.我曾使用uiautomatorviewer查找带有id的元素.
例如:driver.findElement(By.id(“io.mysoft.testapp:id / login”)).click();

到目前为止,一切都很清晰完美,但我的样本测试失败了,显示我的错误

Failed: Loginforsample
org.openqa.selenium.NoSuchElementException: An element Could not be located on the page using the given search parameters. (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 5.51 seconds

经过长时间的研究,我发现我们必须通过driver.context(“WEB_VIEW”);切换到测试逻辑中的WEB_VIEW.我还尝试使用以下代码获取WEB_VIEW:

Set<String> contextNames = ((AppiumDriver) driver).getContextHandles();
        for (String contextName : contextNames) {
            System.out.println("FirsT" + contextNames);//output is //NATIV_APP
            ((AppiumDriver) driver).context(contextName);     
        }

我只从阵列中获取NATIV_APP但没有打印WEB_VIEW.我已经研究过要启用WEB_VIEW调试,我们必须在webView类上调用静态方法setWebContentsDebuggingEnabled,这样我们就可以在webView上查找元素并对其进行清晰测试.

我是一个角色开发者,我选择离子来开发混合应用程序.我的应用程序中没有类或任何内容,即编码时没有java.吃掉我大脑的问题是如何在我的离子应用程序(混合)中启用setWebContentsDebuggingEnabled?有没有办法从离子混合应用程序获取web_view?我认为这是我的测试失败的主要原因.请任何人都有解决方案.过去一周我一直在研究这个问题.

提前致谢.

解决方法

您需要在Android应用程序中启用setWebContentsDebuggingEnabled.请参阅此 link以在Android应用程序中启用.

此外,一旦获得WEB_VIEW,您就可以直接在Web View中查找元素.为此,您需要更新Android SDK.最新的UIAutomator具有内置功能,可以在不切换上下文的情况下查找Web视图中的元素.

您需要具有OS版本6.0的Android设备来自动执行脚本,并且在自动执行脚本之后,您可以将其用于OS版本低于6.0的设备.

我已经回答了类似的问题here.你可以参考这个.

我希望这有帮助 :)

android – Gradle依赖项导致错误“无效的Magic Number”

android – Gradle依赖项导致错误“无效的Magic Number”

我在 GitHub上有一个项目,我在家里的办公室工作.大约2个月,它在两台机器上运行良好.两个星期前,它停止在家用电脑上运行,但在我的工作电脑上仍能正常工作.

这是我得到的错误:

:app:shrinkDebugMultiDexComponents Failed

FAILURE: Build Failed with an exception.

  • What went wrong:
    Execution Failed for task ‘:app:shrinkDebugMultiDexComponents’.
    java.io.IOException: Can’t read [D:\dev\gitRepo\app\android\app\build\intermediates\multi-dex\debug\allclasses.jar] (Can’t process class [__MACOSX/com/stripe/android/._BuildConfig.class] (Invalid magic number [51607] in class))
  • Try:
    Run with –stacktrace option to get the stack trace. Run with –info or –debug option to get more log output.

给我错误的条带包是第三方库that you can find here.我将它作为我的build.gradle文件中的依赖项完全按照他们的说法列出.

compile 'com.stripe:stripe-android:+'

我已经注释掉了与条纹相关的所有代码,并且应用程序运行完全正常,所以我知道它与我如何处理该包有关.

不幸的是,我不记得我做了什么让这个停止工作.我确实认为在发生这一周的前一周我升级了Android Studio,并花了相当多的时间搞乱ProGuard配置.

我尝试过的:

>在没有进行ProGuard更改的主分支上工作.
>卸载并重新安装Android Studio
>重新克隆git repo
>安装API 17(eclipse的条纹需要这个.不是Studio,但我试了一下).
>联系条形客户支持,但他们没有任何线索.
> This stack overflow post.但是,没有Mac计算机触及过该项目,也没有亲自压缩与条纹有关的任何内容.
> From here,将幻数从十六进制转换为ASCII.结果是我不认识的Q`.

我认为这可能与我为ProGuard所做的事情有关,但我不明白如何做.我和Proguard的工作完全不同,有一个干净的AndroidStudio安装,有一个干净的存储库克隆,当我在办公室时,项目仍然正常.

编辑

我在调试BuildType上运行它.这些是我的3个gradle文件.第一个是整个项目,第二个是应用程序模块,第三个是本地android库模块.

项目build.gradle:
buildscript {
存储库{
jcenter()
maven {url’http://download.crashlytics.com/maven‘}
}
依赖{
classpath’com.android.tools.build:grad:1.2.3′
classpath’com.crashlytics.tools.gradle:crashlytics-gradle:1. “
}
}

allprojects {
    repositories {
        jcenter()
        maven{ url 'http://download.crashlytics.com/maven' }
    }
}

Android应用程序模块build.gradle

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.+'
    }
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

repositories {
    maven { url 'https://maven.fabric.io/public' }
}


android {
    compileSdkVersion 22
    buildToolsversion "22.0.1"

    defaultConfig {
        applicationId "com.app.android"
        renderscriptTargetApi 19
        renderscriptSupportModeEnabled true
        minSdkVersion 16
        targetSdkVersion 22
        multiDexEnabled = true
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.txt'
            buildConfigField 'Boolean','enableCrashlytics','true'
        }
        debug {
            buildConfigField 'Boolean','false'
        }
        adhoc {
            debuggable true
            signingConfig signingConfigs.debug
            buildConfigField 'Boolean','true'
        }
    }
    packagingOptions {
        exclude 'meta-inf/DEPENDENCIES.txt'
        exclude 'meta-inf/LICENSE.txt'
        exclude 'meta-inf/NOTICE.txt'
        exclude 'meta-inf/NOTICE'
        exclude 'meta-inf/LICENSE'
        exclude 'meta-inf/DEPENDENCIES'
        exclude 'meta-inf/notice.txt'
        exclude 'meta-inf/license.txt'
        exclude 'meta-inf/dependencies.txt'
        exclude 'meta-inf/LGPL2.1'
    }
}
dependencies {
    compile project(':localLibrary')
    compile 'com.facebook.android:facebook-android-sdk:3.21.1'
    compile 'commons-io:commons-io:2.4'
    compile 'com.github.bumptech.glide:glide:3.6.1'
    compile 'com.android.support:support-v4:22.0.1'
    compile 'com.google.android.gms:play-services-identity:8.1.0'
    compile 'com.google.android.gms:play-services-plus:8.1.0'
    compile 'com.google.android.gms:play-services-maps:8.1.0'
    compile 'com.android.support:multidex:1.0.1'
    compile 'io.card:android-sdk:5.0.1'
    compile 'com.stripe:stripe-android:+'
    compile('com.crashlytics.sdk.android:crashlytics:2.5.2@aar') {
        transitive = true;
    }
}

本地Android库模块build.gradle

apply plugin: 'com.android.library'

android {
    compileSdkVersion 22
    buildToolsversion "22.0.1"

    defaultConfig {
        minSdkVersion 16
        targetSdkVersion 22
        multiDexEnabled = true
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:22.1.0'
    compile 'com.google.code.gson:gson:2.2.2'
    compile 'com.android.support:multidex:1.0.0'
    compile group: 'org.apache.httpcomponents',name: 'httpmime',version: '4.3.5'
    compile group: 'org.apache.httpcomponents',name: 'httpclient-android',version: '4.3.5'

}

解决方法

此问题可能与您正在运行的Java版本有关.我遇到了类似的问题,发现Java 8用于构建.当我更改为Java 7时,此构建问题已得到修复.

在Android Studio中转到

File -> Project Structure -> SDK Location

JDK位置应该是Java 1.7.x(Java 7)

android – React native Appium,如何查找元素

android – React native Appium,如何查找元素

我正在尝试(太长时间……)让appium使用react native,但似乎找不到任何元素.

我正在使用模拟器,Nexus 6,android 6.0,ubuntu,appium 1.6.0,RN 0.39.2.

我正在努力找到最基本的例子:

// foo.js
render () {
  return (
    <Text>foo</Text>
  )
}

// spec.js
// ... some setup ...
      driver
        .elementByAccessibilityId(''foo'')
          .click()

我得到……

1) should be able to find ''Buttons'' and click it


  0 passing (13s)
  1 failing

  1) Android find and click should be able to find ''Buttons'' and click it:
     Error: [elementByAccessibilityId("foo")] Error response status: 7,NoSuchElement - An element Could not be located on the page using the given search parameters. Selenium error: An element Could not be located on the page using the given search parameters.

我也尝试过设置:
<可访问文本的accessibilityLabel = {''foo''}> foo< / Text>

同样的回应……

有任何想法吗?

解决方法

我最终使用了这个解决方案:

<Text accessibilityLabel={ ''FOO'' } testID={ ''FOO'' }>some stuff here</Text>

然后在测试中:

driver
  .elementByAccessibilityId(''FOO'')

感谢@jonesdar指出here

今天关于android – 如何从Appium修复错误“无法从sw_vers输出检测Mac OS X版本:’10 .12’”的介绍到此结束,谢谢您的阅读,有关3分钟了解Appium:使用appium做Android手机自动化测试!、android – Appium:如何从基于离子的混合应用程序获取WEB_VIEW?、android – Gradle依赖项导致错误“无效的Magic Number”、android – React native Appium,如何查找元素等更多相关知识的信息可以在本站进行查询。

本文标签: