我是Appium的新手。 我正在尝试自动化一个应用程序,该应用程序在启动时要求允许访问联系人列表。我在各种网站上研究过该解决方案,但无法解决这个问题。
代码:
public class TestSuiteBase {
WebDriver driver = null;
//Element Variables
String deviceIdTextbox = "et_Registration_DeviceID";
@BeforeClass
public void setup() throws MalformedURLException, InterruptedException {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("platformVersion", "4.4.2");
capabilities.setCapability("deviceName", "0ef3c26f");
capabilities.setCapability("browserName", "");
capabilities.setCapability("app", "D:\\Ashish\\AppiumProject\\Mobile Framework\\apk\\androidApplication.apk");
capabilities.setCapability("appPackage", "com.atyati.rbl.mfi");
capabilities.setCapability("appActivity", "com.atyati.rbl.mfi.Activity.SplashScreenActivity");
AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
driver.manage().timeouts().implicitlyWait(80, TimeUnit.SECONDS);
Thread.sleep(10000);
}
@Test
public void Test() throws Exception {
Thread.sleep(2000);
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("appWaitPackage", "com.android.packageinstaller");
capabilities.setCapability("appWaitActivity", ".permission.ui.GrantPermissionsActivity");
System.out.println("Trying to click Allow");
driver.findElement(MobileBy.id("permission_allow_button")).click();
driver.findElement(By.id(deviceIdTextbox)).sendKeys("123456789");
}
@AfterClass
public void tearDown() throws Exception {
driver.quit();
}
输出:我的代码启动应用程序但是当权限弹出表面时,它无法单击。
问题:无法点击权限弹出窗口。
查询:我是否需要指定" appActivity"在移动到每个屏幕之前?
如果需要任何其他细节,请告诉我。
答案 0 :(得分:0)
我已经弄清楚我哪里出错了。
解决方案:我必须为“编辑文本框”指定完整的资源ID
String deviceIdTextbox = "com.atyati.rbl.mfi:id/et_Registration_DeviceID";
此外,无需指定活动。
@Test
public void Test() throws Exception {
Thread.sleep(1000);
if(androidDriver!=null){
System.out.println("driver does not == null");
System.out.println("Trying to click Allow");
androidDriver.findElement(By.id(contactListAllowPermissionBtn)).click();
Thread.sleep(1000);
androidDriver.findElement(By.id(deviceIdTextbox)).sendKeys("123456789");
androidDriver.findElement(By.id(registerUserBtn)).click();
} else {
System.out.println("driver == null");
}
}
答案 1 :(得分:0)
您可以使用此JAVA CODE单击允许应用程序权限按钮。只需添加方法并在您的类文件中调用您的测试用例中的方法。此代码摘自THIS POST
上的示例public void allowAppPermission(){
while (driver.findElements(MobileBy.xpath("//*[@class='android.widget.Button'][2]")).size()>0)
{ driver.findElement(MobileBy.xpath("//*[@class='android.widget.Button'][2]")).click();
}
}