Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Appium和Selenium WebDriver在不重置其状态的情况下测试Android应用程序_Java_Android_Selenium Webdriver_Appium - Fatal编程技术网

Java 使用Appium和Selenium WebDriver在不重置其状态的情况下测试Android应用程序

Java 使用Appium和Selenium WebDriver在不重置其状态的情况下测试Android应用程序,java,android,selenium-webdriver,appium,Java,Android,Selenium Webdriver,Appium,我希望在不重置其状态的情况下测试我的android应用程序。我注意到每次运行应用程序时都会出现不同的弹出窗口,因此我希望记录所有不同的弹出窗口 在这里,我对“跑步”的定义是轻触手机上的后退按钮,然后再次轻触我的应用程序图标 但是,我无法在Appium测试中模拟手机的这种物理窃听。我可以退出第一次测试,但无法再次重新打开应用程序。(模拟用手指轻敲应用程序图标) 我尝试过的事情: 1. Setting noReset to true in capabilities setting 2. Using

我希望在不重置其状态的情况下测试我的android应用程序。我注意到每次运行应用程序时都会出现不同的弹出窗口,因此我希望记录所有不同的弹出窗口

在这里,我对“跑步”的定义是轻触手机上的后退按钮,然后再次轻触我的应用程序图标

但是,我无法在Appium测试中模拟手机的这种物理窃听。我可以退出第一次测试,但无法再次重新打开应用程序。(模拟用手指轻敲应用程序图标)

我尝试过的事情:

1. Setting noReset to true in capabilities setting

2. Using uiautomator to find my application.  However, uiautomator doesn't seem to be able to detect any icons in the app menu page. It just shows many layers of frame layouts.

3. closeApp() and launchApp() resets the application and this defeats the purpose of my test.  My application somehow behaves differently with each run so I hope to run my test in a single session (i.e. closing and opening the application while it is still in the same state)

我是否可以以代码的形式模拟图标的物理点击?我知道我们可以设置坐标,但我不想硬编码我的测试只在手机的特定实例上运行。如果卸载了其他应用程序,并且我的应用程序图标移动到另一个位置,它将不会运行。

如果我没有误解您的意思,您可以使用
AndroidDriver尝试使用以下组合:

driver.navigate().back(); // from app home screen to mobile home screen
driver.startActivity(String appPackage, String appActivity); // or possibly cast ((AndroidDriver)driver)

您可以通过指定程序包名称和启动活动名称来启动应用程序,而不是在所需的CAP中指定apk文件,这样您的应用程序就不会在每次启动应用程序时重置 Den使用按键4点击后退按钮,Den u可以调用启动应用程序功能启动应用程序而无需重置

这对我来说很有效:

"appPackage": "com.company.app",
"appActivity": "com.company.app.activities.HomeActivity",
"skipDeviceInitialization": true,
"skipServerInstallation": true,
"noReset": true
这不会重新安装.apk、appium服务器,也不会删除appdata。你可以像在开始测试之前一样启动应用程序

我在GitHub上发现了相同的问题:


我的代码找不到startActivity函数。您正在使用哪些库?我正在使用java客户端:4.0.0和selenium 2.53。0@ykw-如前所述,该方法与AndroidDriver关联,您使用的驱动程序是什么?哦,是的。。。我用的是AppiumDriver。很抱歉AppiumDriver和AndroidDriver有什么区别P@ykw-AndroidDriver是从AppiumDriver派生出来的,并且更特定于平台(Android)。我得到了这个异常:线程“main”java.lang.NoClassDefFoundError中的异常:org/apache/commons/lang3/StringUtils位于io.appium.java_client.Android.AndroidDriver.startActivity(AndroidDriver.java:343)在io.appium.java_client.android.AndroidDriver.startActivity(AndroidDriver.java:389)上,这是由于包定义造成的吗?我使用AppiumServer启动服务器,因此在设置功能阶段没有指定包和活动名称。