当前位置:首页 » 安卓系统 » androidappium

androidappium

发布时间: 2022-08-28 14:38:50

⑴ 用appium来测试android端的非原生应用可以吗

可以测试非原生的app,输入文字直接使用appium的方法即可。
如果想输入中文,也是能实现的,换个方法就行,github上有开源的工具

⑵ appium能测试android 5.1吗

可以
接下来我们研究一下测试知乎Android客户端。自行下载
配置目录如下:把知乎客户端命名为hu.apk

编写基于java testng的测试用例:
由于本人是熟悉selenium webdriver,所以在Android对象识别时,采用的策略和selenium webdriver 类似
怎么去识别APP的元素的,这里用到Android SDK tools 目录下的工具uiautomatorviewer ,执行uiautomatorviewer.bat就可
首先解析hu app 拿到其package 和 activity,这里使用appium gui界面,具体操作如图:

接下来识别APP的元素,比如登陆按钮,看到resourceId,可以是雨天webdriver的find Element By.id

至于登陆用户名和密码,在Android中都是EditText控件,可以使用By.class

完成对象识别,最终代码如下:

package com.dbyl.core;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;

import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import io.appium.java_client.android.AndroidDriver;

import java.io.File;
import java.net.URL;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class Hu {
private AndroidDriver driver;

@BeforeMethod(alwaysRun=true)
public void setUp() throws Exception {
// set up appium
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "apps");
File app = new File(appDir, "hu.apk");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("deviceName","Android Emulator");
capabilities.setCapability("platformVersion", "4.4");
//if no need install don't add this
capabilities.setCapability("app", app.getAbsolutePath());
capabilities.setCapability("appPackage", "com.hu.android");
//support Chinese
capabilities.setCapability("unicodeKeyboard" ,"True");
capabilities.setCapability("resetKeyboard", "True");
//no need sign
capabilities.setCapability("noSign", "True");
capabilities.setCapability("appActivity", ".ui.activity.GuideActivity");
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}

@AfterMethod(alwaysRun=true)
public void tearDown() throws Exception {
driver.quit();
}

@Test(groups={"ZHTest"})
public void Login(){
//find login button
WebElement loginButton = driver.findElement(By.id("com.hu.android:id/login"));
loginButton.click();

//wait for 20s
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);

//find login userName and password editText
List<WebElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText");
textFieldsList.get(0).sendKeys("[email protected]");
textFieldsList.get(1).sendKeys("cookies123");
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);

//find ok button byName
driver.findElementByName("OK").click();
driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS);

//find keyword 首页 and verify it is display
Assert.assertTrue( driver.findElement(By.name("首页")).isDisplayed());

}
}

接下来就可以debug,首先启动Android模拟器 ,启动完毕后再明明很测试,若结果如下:

说明模拟器可以使用
接下来在命令行运行apppium
等待1-2分钟
run as testng,就能看到自动安装,登陆知乎
PASSED: Login
===============================================
Default test
Tests run: 1, Failures: 0, Skips: 0
===============================================

===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@4474c7fe: 1938 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@1fdf50a3: 121 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms
[TestNG] Time taken by org.testng.reporters.XMLReporter@697748ae: 423 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@68450212: 1669 ms
[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@7f92deaf: 240 ms

⑶ 怎么使用appium连接android模拟器

1、Appium连接sdk中的模拟器
了解android的人都在知道,android sdk中自带AVD Manager(Android Virtual Device Manager).开发者会使用AVD Manager创建一个android模拟器来调试自己的应用。所以首先我们介绍如何让Appium连接好我们的模拟器
1) 创建一个AVD,并启动
点击Create 后填写相关信息后,点击OK,选中AVD后点击Start

2)启动appium 点击右上角的启动按钮

启动成功后,如下图

或者在cmd命令中输入:appium

2、Appium连接真机
实际开发的过程中我们可能是直接拿真机来调试。所以Appium如何连接真机呢?原理上和上述方式一致。但真机会稍微复杂一点
1)打开手机的USB调试模式
不同的手机打开调试模式的方式不同。一般都在设置中的开发者模式中打开
2)手机连接电脑
使用数据线连接手机与电脑,然后在cmd中输入adb devices查看是否连接成功
新手可能会出现两个问题
一是输入adb命令时提示不是内部命令或者外部命令

那么你需要下载一个adb工具包并存放在C:\Windows\System32目录下(必须强调:与sdk中的adb工具包版本一致!!!!)

二是需要打开手机的usb调试模式并安装好驱动
之后在cmd中输入adb devices 提示如下图则成功

3)启动appium服务
在cmd命令中输入:appium

启动成功
3、Appium连接第三方模拟器
有时候我们可能不太想用真机或者android sdk中自带的模拟器。而是使用一些三方的android模拟器。例如夜神,逍遥等等
理论上来说可以使用连接真机的方式一样来尝试连接。以下案例使用逍遥模拟器来做演示
1)使用adb连接到逍遥模拟器
网上网络了一番后,发现逍遥模拟器的连接方式是:adb connect 127.0.0.1:21503

所以其udid就是127.0.0.1:21503

2)连接到appium 服务
在cmd命令中输入:appium

启动成功

⑷ APP自动化测试appium环境怎么搭建

APP自动化测试appium环境怎么搭建?1
/12
下载安装node.js (注意操作系统,32位,64位)。安装完成后,检查是否安装成功:cmd, 输入node -v , 显示安装版本信息,则安装成功,如下图所示:
2
/12
安装JDK配置环境变量
JDK安装,以及环境变量设置
下载eclipse (注意操作系统,32位,64位),Mars版。
3
/12
配置Android SDK环境
下载Android SDK,下载地址www.androiddevtools.cn,如下图所示:
4
/12
安装保证Level 17或以上版本 api,如下图所示:
5
/12
Android操作系统选择安装用于模拟机,如下图所示:
6
/12
配置环境变量
a>新增变量:ANDROID_HOME,设置值为安装目录: l例如 E:\android-sdk
b>Path中新增参数:%ANDROID_HOME%\tools; %ANDROID_HOME%\platform-tools
7
/12
验证是否安装配置成功
cmd: 输入 android, 弹出SDK Manager窗口。
8
/12
ADT安装
打开eclipse,help>install new software, 输入https://dl-ssl.google.com/android/eclipse
下载时间会比较久,也可以考虑直接下载后本地安装,如下图所示:
9
/12
安装完成,重启Eclipse,如下图所示:
10
/12
安装Appium,下载: http://appium.io,如下图所示:
11
/12
设置环境变量
Appium目录和他的bin目录都加入环境变量PATH:例如
APPIUM_HOME: E:\App\Appium
Path: %APPIUM_HOME%\node_moles\.bin
12
/12
运行appium-doctor来验证Appium的所有依赖是否配置正确。

⑸ Appium超时错误连接到驱动程序时问题,怎么解决

问题

1. error: Failed to start an Appium session, err was: Error: Requested a new session but one was in progress


之前的会话没有关闭,然后你又运行了测试实例,也没有设置覆盖.
解决:
1.重新停止appium服务,开启Appium服务
2.在Genarel Setting那里设置覆盖Session,重启Appium

测试结束在AfterClass加driver.quit()

2. error: Failed to start an Appium session, err was: Error: Command failed: C:Windowssystem32cmd.exe /s /c "D:android-sdk-windowsplatform-toolsadb.exe -s adb server version (32) doesn't match this client (36); killing…

wait-for-device"
error: could not installsmartsocketlistener: cannot bind to 127.0.0.1:5037:

没有链接上手机或者模拟器,请确认已经连接成功,重新链接

3. error: Android devices must be of API level 17 or higher. Please change your device to Selendroid or upgrade Android on your device.

手机系统低于4.2,appium不支持4.2.2以下的系统,请换一个手机或者模拟器来测试。

4. Error: Permission to start activity denied.


**activity在清单文件里面没添加Android:exported="true"的话,你不能直接打开对应的activity,需要从启动页activity打开。
exported属性就是设置是否允许activity被其它程序调用**

5. error: Failed to start an Appium session, err was: Error: Activity used to start app doesn't exist or cannot ve launched! Make usre it exists and is launchable activity

要打开的activity不存在,activity路径错误,改为完整正确的activity路径

6. error: Failed to start an Appium session, err was: Error: 'java - version' failed. Error: Command failed: C:Windowssystem32cmd.exe /s /c "java -version"


Java版本错误,请安装最新的版本。

7.> info: [debug] Error: Command failed: C:Windowssystem32cmd.exe /s /c "D:android-sdk-windowsplatform-toolsadb.exe -s 8806a0b0 shell "echo 'ready'"error: unknown host service

链接手机失败,重新链接手机即可,我就是重新拔插了一下usb

Error: Command failed: C:Windowssystem32cmd.exe /s /c "D:android-sdk-windowsplatform-toolsadb.exe -s 8806a0b0 shell "echo 'ping'""

error: unknown host service

adb被突然占用导致,例如你在运行用例的时候运行了模拟器。

8. UIAutomatorViewer提示: Unable to connect to adb. Check if adb is installed correctly

解决,sdk升级到了25产生的问题。

解决方法:

  • 将adb.exe复制一份到uiautomatorviewer.bat目录下

  • 修改uiautomatorviewer.bat文件最后一行(改binddir=%prog_dir%为自己的platform-tools本地路径)

  • 9 error: Failed to start an Appium session, err was:INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.appium.settings without first uninstalling

    When you are at final step to execute test automation script for mobile app testing on a mobile emulator or a virtual device or a real device, you might observe that script execution fails with different kinds of errors, In context to current article you will look at the error and solutions for: INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.appium.settings without first uninstalling.

    Error in Appium Server:

    1

    2

    3

    4

    5

    6

    7

    8

  • Error: Command failed: C:Windowssystem32cmd.exe /s /c

    "C:Users{User}-toolsadb.exe -s

    emulator-5554 install

    "C:Program Files (x86)Appium ode_molesappiumuildsettings_apksettings_apk-debug.apk""

    &gt; Failed to install C:Program Files (x86)Appium ode_molesappiumuildsettings_apk

    settings_apk-debug.apk: Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install

    io.appium.settings without first uninstalling.]

  • Error in Android studio run console:

    1

    2

    3

    4

    5

    6

    7

    8

    9

  • org.openqa.selenium.SessionNotCreatedException: A new session could not be created.

    (Original error: Command failed: C:Windowssystem32cmd.exe /s /c

    "C:Users{User}-toolsadb.exe -s emulator-5554 install

    "C:Program Files (x86)Appium ode_molesappiumuildsettings_apksettings_apk-debug.apk""

    Failed to install C:Program Files (x86)Appium ode_molesappiumuildsettings_apk

    settings_apk-debug.apk: Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install

    io.appium.settings without first uninstalling.]

    ) (WARNING: The server did not provide any stacktrace information)

    Command ration or timeout: 0 milliseconds

  • For the first time when you execute the script itmight pass, but it will fail with above error when you try to execute the same or any other script multiple times. Or when your test script execution fails on the first attempt for some other reason, and when you fix it and execute it again, you might encounter this new issue.

    原因:

    The reason for this error is that Appium installs 2 mobile applications before executing the script.

    1. io.appium.settings

    2. io.appium.unlock

    Theseare the supportive mobile applications appium utilizes to execute the test automation script in Mobile Emulator or virtual device or a real mobile device.

    Ideally Appium should remove these files every time at the end of the script execution or termination, if it is intends to install themevery time a script is executed, or it should conditionally install these apps / apksto the mobile emulator or mobile device.

    In your mobile emulator / Virtual Device / Real device, the 2 mobile applications appear as below:

    There are multiple ways to troubleshootthis error and go ahead for asuccessful test script execution.

    解决办法

    Solution 1: ADB's uninstall command to remove the files.

    You can open command prompt, assuming that you already had set the environment variables for ANDROID_HOME and Path variables for sdk tools and platform tools.

    And execute commands as shown below:

    Solution 2: Uninstall manually

    You can open the mobile emulator / virtual device / real device and go to apps and uninstall them.

    Solution 3: Write code as part of your test automation script.

    As part of your selenium test automation script, you could write instructions to execute the commands provided in solution 1 above, so that this issue would not arise.

    Hope this article has been helpful and you are able to proceed further with script execution.

    Request to kindly share any of your queries in form of comments, we would try our best to provide any solution for you.

    10.出错信息里含有"ps 'uiautomator',具体信息未 A new session could not be created. (Original error: Command failed: C:Windowssystem32cmd.exe /s /c "C:Userssxie-toolsadb.exe -s emulator-5554 shell "ps 'uiautomator'""

    android-appium: A new session could not be created

    junitexceptionandroidappium自动化

    detail log:
    org.openqa.selenium.SessionNotCreatedException: A new session could not be created. (Original error: Command failed: C:Windowssystem32cmd.exe /s /c "C:Userssxie-toolsadb.exe -s emulator-5554 shell "ps 'uiautomator'""
    ) (WARNING: The server did not provide any stacktrace information)
    Command ration or timeout: 0 milliseconds
    Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
    System info: host: 'WL00070299', ip: '10.110.12.39', os.name: 'Windows 8.1', os.arch: 'x86', os.version: '6.3', java.version: '1.8.0_40'
    Driver info: driver.version: AndroidDriver
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect..newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:215)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:167)
    at io.appium.java_client.remote.AppiumProtocolHandShake.createSession(AppiumProtocolHandShake.java:161)
    at io.appium.java_client.remote.AppiumProtocolHandShake.createSession(AppiumProtocolHandShake.java:76)
    at io.appium.java_client.remote.AppiumCommandExecutor.doExecute(AppiumCommandExecutor.java:111)
    at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:162)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637)
    at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42)
    at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)
    at io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:250)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236)
    at org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:137)
    at io.appium.java_client.DefaultGenericMobileDriver.(DefaultGenericMobileDriver.java:38)
    at io.appium.java_client.AppiumDriver.(AppiumDriver.java:88)
    at io.appium.java_client.AppiumDriver.(AppiumDriver.java:112)
    at io.appium.java_client.android.AndroidDriver.(AndroidDriver.java:73)
    at com.sky.demo.ContactTest.setUp(ContactTest.java:44)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schele(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

    ==========================================
    直接在cmd中执行"C:Windowssystem32cmd.exe /s /c "C:Userssxie-toolsadb.exe -s emulator-5554 shell "ps 'uiautomator'""
    bad pid 'uiautomator'", 报错: bad pid 'uiautomator'

    代码内容为


    public class ContactTest {
    private AndroidDriver driver;
    @Before
    public void setUp() throws Exception {
    //设置apk的路径
    File classpathRoot = new File(System.getProperty("user.dir"));
    File appDir = new File(classpathRoot, "apps");
    File app = new File(appDir, "ContactManager.apk");

  • //设置自动化相关参数

  • DesiredCapabilities capabilities = new DesiredCapabilities();

  • capabilities.setCapability(CapabilityType.BROWSER_NAME, "");

  • capabilities.setCapability("automationName","Appium");

  • capabilities.setCapability("platformName", "Android");

  • capabilities.setCapability("deviceName", "Pixel_XL_API_25");// Galaxy_Nexus_API_25

  • capabilities.setCapability("noReset", true);

  • capabilities.setCapability("avdReadyTimeout", 300000);

  • capabilities.setCapability("sessionOverride", true);

  • //设置安卓系统版本

  • capabilities.setCapability("platformVersion", "7.1.1");

  • //设置apk路径

  • capabilities.setCapability("app", app.getAbsolutePath());

  • //设置app的主包名和主类名

  • capabilities.setCapability("appPackage", "com.example.android.contactmanager");

  • capabilities.setCapability("appActivity", ".ContactManager");

  • //初始化

  • driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

  • driver.manage().timeouts().implicitlyWait(10,TimeUnit.SECONDS);

  • }

  • @Test

  • public void addContact(){

  • WebElement el = driver.findElement(By.name("Add Contact"));

  • el.click();

  • List<WebElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText");

  • textFieldsList.get(0).sendKeys("feimaoyuzhubaobao");

  • textFieldsList.get(2).sendKeys("forever together");

  • driver.swipe(100, 500, 100, 100, 2);

  • driver.findElementByName("Save").click();

  • }

  • @After

  • public void tearDown() throws Exception {

  • driver.quit();

  • }

  • }

    解决办法:

    resolved by this way:
    adb.js(C:Program Files (x86)Appium ode_molesappium ode_molesappium-adblibadb.js) 中1035 行this.shell("ps '" + name + "'", function (err, stdout) {
    对应执行的指令是ps 'uiautomator', Android7不支持这个指令格式,所以执行结果是bad pid 'uiautomator'
    目前Appium未对此进行处理,所以需要修改此指令的执行方式
    即将
    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, []);

    }

    并增加上面用到的shell_grep函数:
    ADB.prototype.shell_grep = function (cmd, grep, cb) {
    if (cmd.indexOf('"') === -1) {
    cmd = '"' + cmd + '"';
    }
    var execCmd = 'shell ' + cmd + '| grep ' + grep;
    this.exec(execCmd, cb);

    };

    11.Android 7.0系统的手机无法执行appium脚本的问题

    AppiumAppium 版本 1.4.16,Android 设备固件 7.x,执行脚本时,报错使用语言:python报错如下:
    WebDriverException: Message: A new session could not be created. (Original error: Could not extract PIDs from ps output. PIDS: [], Procs: ["bad pid 'uiautomator'"])

    这个是因为appium版本1.4.16使用的uiatumator1.0不支持的原因导致?如果不升级appium版本,是否有解决方案?

    解决办法

    uiautomator1.0应该是不支持7.0,不升版本就换用uiautomator2.0吧,或者用下面的改脚本的方法使用。

    解决Android 7.0系统的手机无法执行appium脚本的问题,改问题的具体解决方法如下:

  • 找到appium的安装目录下的adb.js文件,windows版本的目录如下:Appium ode_molesappium ode_molesappium-adblib
    2、打开adb.js,手动修改该文件下的内容,此方法我已经试验成功。

  • adb.js 中1035 行this.shell("ps '" + name + "'", function (err, stdout) {
    对应执行的指令是ps 'uiautomator', Android7不支持这个指令格式,所以执行结果是bad pid 'uiautomator'
    目前Appium未对此进行处理,所以需要修改此指令的执行方式
    即将
    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, []);

    }

    并增加上面用到的shell_grep函数:
    ADB.prototype.shell_grep = function (cmd, grep, cb) {
    if (cmd.indexOf('"') === -1) {
    cmd = '"' + cmd + '"';
    }
    var execCmd = 'shell ' + cmd + '| grep ' + grep;
    this.exec(execCmd, cb);

    };

  • 网上还有如下的修改解决办法:以下我未试验。
    ADB.prototype.getPIDsByName = function (name, cb) {
    logger.debug("Getting all processes with '" + name + "'");
    this.shell("ps '" + name + "'", function (err, stdout) {
    if (err) return cb(err);
    stdout = stdout.trim();
    var procs = [];
    var outlines = stdout.split(" ");
    outlines.shift(); //在该处添加此行代码
    3、重启appium

  • 技巧

    1.每次测试都重新安装app

    为capabilities色设置noReset为true
    capabilities.setCapability("noReset", true);

    2.中文乱码

    这都是编码问题:

    1.方法1:

    Android Studio修改文件编码的方法,最底部的UTf-8,点击选GBK就可以了,reload文件。(ps:先把文件内容全选复制一下再转换编码,再粘贴,不然文件内容就变乱码了)

    2.方法2:

    用的是原来的UTF-8编码,然后在测试mole的build.gradle里面添加三行代码

    tasks.withType(JavaCompile){

    options.encoding = 'UTF-8'

    }

    3.清除编辑框EditText内容

    这个问题好像是看手机系统的,我之前的手机就会出现sendKeys的时候没有全选去掉本来的内容,现在都会自动全选覆盖了,这个也不算问题了。

    /**

    * 逐字删除编辑框中的文字

    * @param element 文本框架控件

    */

    public void clearText(AndroidElement element){

    String className = element.getClass().getSimpleName();

    if (className.equals("EditText")){

    String text = element.getText();

    //跳到最后

    driver.pressKeyCode(KEYCODE_MOVE_END);

    for (int i = 0; i < text.length(); i ++){

    //循环后退删除

    driver.pressKeyCode(BACKSPACE);

    }

    }else {

    print("不是文本输入框架,无法删除文字");

    }

    }

    1

    4.点击输入法键盘的回车搜索

    方法1:切换输入法

    利用adb命令先切换为自己的输入法,按了搜索再切换为appium的输入法

    查看当前手机的输入法

    cmd执行下面的的代码

    adb shell ime list -s

    可以看到类似下面的结果,

    C:UsersLITP>adb shell ime list -s

    com..input_mi/.ImeService

    com.sohu.inputmethod.sogou.xiaomi/.SogouIME

    io.appium.android.ime/.UnicodeIME

    C:UsersLITP>

    执行adb命令

    先写好一个执行cmd的方法

    /**

    * 执行adb命令

    * @param s 要执行的命令

    */

    private void excuteAdbShell(String s) {

    Runtime runtime=Runtime.getRuntime();

    try{

    runtime.exec(s);

    }catch(Exception e){

    print("执行命令:"+s+"出错");

    }

    }

    在需要搜索的时候执行下面的代码,切换的输入法用自己查看列表的输入法内容,我这里是搜狗输入法

    //使用adb shell 切换输入法-更改为搜狗拼音,这个看你本来用的什么输入法

    excuteAdbShell("adb shell ime set com.sohu.inputmethod.sogou.xiaomi/.SogouIME");

    //再次点击输入框,调取键盘,软键盘被成功调出

    clickView(page.getSearch());

    //点击右下角的搜索,即ENTER键

    pressKeyCode(AndroidKeyCode.ENTER);

    //再次切回 输入法键盘为Appium unicodeKeyboard

    excuteAdbShell("adb shell ime set io.appium.android.ime/.UnicodeIME");

⑹ appium 不支持android 8.0吗

Appium 支持Android也支持iOS,但是两者还有很大的区别,我使用Appium一个多月,刚开始是Android,后面才用iOS,所以做iOS自动化的时候比Android艰难多了,后来才发现这两个的模式有一定的差别。(当然可能是我Mac的基础太差)就以我在理解浅显的描述下两者的区别。Appium Android 工作模式(如下经验仅仅是我在windows上的经验,mac上只用了ios,如有说错,请大家指正):
过程大概如下:
1. Android设备已经开启(包括真机和模拟器,真机已经连接上电脑,当然驱动少不了。。。)
2. Appium 打开(命令行打开的同时Appium server也同时开启了)
3. Appium启动时连接Android设备,这里不做任何设置(什么app,浏览器,API版本。。。,IP和端口还是需要设置的)就可以成功开启Appium
Appium Server启动直接连接设备。
自动化用例执行时连接上Appium server,才告诉Appium我要测什么app。。。之类的caps
Appium iOS 工作模式:
iOS 和 Android不同,模拟器和真机有区别,我分开说
iOS模拟器过程如下:
1. 打开Appium (命令行直接执行Appium就算是启动了,GUI的可能还需要点击launch)
2. 启动Appium server 除了设置IP和端口,别的也不需要设置(命令行打开的时候就带了IP和端口的参数)
Appium Server开启时不连接任何模拟器,执行用例是才按照caps 开启对应的模拟器和安装app
iOS真机:
1. 真机连接上电脑
2. Appium打开 (命令行直接执行Appium就算是启动了,真机需要-u 参数设置真机UUID,GUI的可能还需要点击launch)
3. 启动Appium server 除了设置IP和端口(命令行打开的时候就带了IP和端口的参数),需要设置真机的UUID(当然还有其他关联caps也需要设置),Appium启动时需要连接真机
那么问题来了(别想歪了,不是blue shit。。。)
开启Appium server的时候什么设置都不要,那GUI里面的那么多设置都是干什么用的?(什么app,浏览器,API版本。。。)
答案就是Inspector用的,Inspector 就和你执行用例一样的,需要告诉server你的caps都是什么。
Android SDK有工具可以用来识别UI的,UIAutomationView,在SDK的目录下, 所以Appium Android inspector的可以不要。
iOS SDK不知道是否有类似的工具,所以我还是用Appium的Inspector来抓对象。
以上都是个人经验,如有错误,望大家一起探讨。

⑺ 怎样使用Appium进行Android自动化测试

1、确定你的appium均安装完毕,且环境变量设置完毕,可以通过cmd命令行:appium-doctor中确定2、真机开启了usb调试模式,通过命令行执行:appium-a127.0.0.1-p4723-UN2F4C15A30001571--no-reset,其中-u后面的部分是手机的devices。来建立手机端和appium服务器的连接3、在初始化程序设置一些运行时的状态,如appium版本,手机版本,型号,系统类型。设置待测试的apppackagename和activityname4、初始化成功,使用使用当前的driver去定位元素,执行sendkeys或者click操作,实现app端自动化ps:初次执行环境问题解决比较麻烦

⑻ windows下appium启动android摹拟器时怎样配置setting

1)安装JDK,并进行环境变量配置
JDK安装很简单,按默认安装即可。
环境变量配置:
添加JAVA_HOME变量, 值:Jdk的安装路径,如:D:\Java\jdk1.7.0_45
添加CLASSPATH变量,值 .;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar
修改path变量,加上这句 %JAVA_HOME%\bin;
检查JAVA环境是否配置好,进入CMD命令行,输入java或javac,可以看到好多的命令提示,说明成功了。

2)安装Node.js,按默认安装即可,可以改变安装的路径。
安装完成以后,检查Node版本安装是否成功:进入CMD,输入node -v, 可以看到版本号,说明成功了。
3)安装ADT,配置环境变量
下载 adt-bundle-windows-x86-20140321.zip,直接解压即可。

配置环境变量,设置ANDROID_HOME 系统变量为你的 Android SDK 路径,并把tools和platform-tools两个目录加入到系统的 Path路径里。
变量名:ANDROID_HOME 值: D:\AutoTest\adt\sdk
设置Path值: %ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools

4)联网安装Appium
进入cmd命令行,输入:
npm install –g appium 或者
npm --registryhttp /registry cnpmj .orginstall -g appium
注:-g全局参数
多等几分钟,可以看到appium的版本1.1.0及安装目录

5)检查一下appium是否安装成功。
进入cmd命令行,输入appium
提示:socket.io started 说明安装好了。

6)检查appium所需的环境是否OK(这步很重要)
进入Cmd命令行,输入appium-doctor ,出现以下提示,All Checks were successful ,说明环境成功。

7)安装Apache Ant (这一步可省)
安装Apache Ant 。解压缩文件夹,并把路径加入环境变量。
变量: ANT_HOME 值: D:\AutoTest\ant-1.9.4
设置Path: %ANT_HOME%\bin;
测试Ant是否安装成功,进入cmd命令行:输入ANT,如果没有指定build.xml就会输出:Buildfile: build.xml does notexist! Build failed

8)安装Apache Maven (这一步可省)
下载Maven ,并解压缩文件夹,把路径加入环境变量。
变量M2_HOME 值:D:\AutoTest\maven-3.1.1
设置Path: %M2_HOME%\bin;
测试Maven是否成功,运行cmd,输入mvn -version如果成功,则出现maven版本等环境信息。

安装:python+webdriver环境
第一步:安装active-python,双击可执行文件,直接默认安装即可。
第二步:安装selenium webdriver
1. 打开cmd
2.
3. 打开python的shell或者IDEL界面 ,输入from selenium import webdriver 如果不报错那就说明你已经安装selenium for python成功了。
4. 安装appium-python-client:(这步很重要,必须)
进入cmd,输入:pip install Appium-Python-Client

以上全部安装好以后,最后就是执行实例来测试一下:
1. 打开Adt,创建一个模拟器,并启动android模拟器。
2. 在cmd启动appium
输入:appium
3. 另开一个cmd终端窗口。切换到实例代码路径下,执行android_contacts.py文件。

⑼ appium中怎么连接android真机测试

启动appium,执行testng测试脚本,脚本启动配置项如下:
import io.appium.java_client.AppiumDriver;import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, "");//这句不是必须的
capabilities.setCapability("deviceName","Android Emulator");
capabilities.setCapability("platformVersion", "4.4");
capabilities.setCapability("platformName","Android");
capabilities.setCapability("appPackage", "com.android.calculator2");
capabilities.setCapability("appActivity", ".Calculator");
AppiumDriver driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), cap

热点内容
创建邮箱地址服务器连接错误 发布:2025-01-13 09:49:24 浏览:723
linux编辑文档 发布:2025-01-13 09:47:51 浏览:435
二手制冷压缩机 发布:2025-01-13 09:43:59 浏览:585
网鱼电脑密码多少 发布:2025-01-13 09:33:46 浏览:464
如何取消子账号密码 发布:2025-01-13 09:22:41 浏览:347
抖音搜索有缓存 发布:2025-01-13 09:17:28 浏览:590
c语言字符数组连接 发布:2025-01-13 08:55:11 浏览:901
国二c语言编程题目 发布:2025-01-13 08:45:41 浏览:285
ipad软件如何加密 发布:2025-01-13 08:28:59 浏览:278
android的文件操作 发布:2025-01-13 08:24:48 浏览:173