![](/img/trans.png)
[英]Not able to click on permission pop-up (Access Contact List) in appium
[英]How to handle App permission pop ups (system popups like device location/contact list) in Appium android tests for OS Marshmallow and above?
PFB代码:
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); //Name of mobile web browser to automate. Should be an empty string if automating an app instead.
capabilities.setCapability(CapabilityType.VERSION, "6.0");
capabilities.setCapability(CapabilityType.PLATFORM, "Android");
capabilities.setCapability("deviceName", <deviceID>);
capabilities.setCapability("locationServicesAuthorized", true);
capabilities.setCapability("appPackage",<Package Name for app under test >); //Replace with your app's package
capabilities.setCapability("appActivity",<Activity Name for app under test >); //Replace with app's Activity
driver = new AndroidDriver<AndroidElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
当被测应用程序首次启动时,它会显示“位置”权限弹出窗口。 弹出元素的资源ID为:com.android.packageinstaller:id / dialog_container ,它在被测试应用程序的外部。 我们能够检测到使用uiAutomatorViewer弹出的“应用程序”权限的元素。 但是,我们无法使用与未通过脚本检测到的元素ID相同的元素ID来运行脚本。
我们尝试使用以下代码:
**capabilities.setCapability("autoAcceptAlerts", true);**
这是行不通的。
我们甚至尝试过使用: driver.switchTo()。alert()。accept(); 这也不起作用。
任何建议将不胜感激。
您可以使用此示例来处理应用程序权限。 这取自此BLOG POST。
import java.net.MalformedURLException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Before;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class WaitTests {
WebDriver driver;
@Before
public void setUp() throws MalformedURLException {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "XT1562");
capabilities.setCapability(CapabilityType.BROWSER_NAME, "Android");
capabilities.setCapability(CapabilityType.VERSION, "6.0.1");
capabilities.setCapability("platformName", "Android");
driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
}
@Test
public void testFirst() {
alllowAppPermission();
driver.findElement(By.name("Login")).click();
driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
}
@After
public void End() {
driver.quit();
}
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();
}
}
}
不幸的是,autoAcceptAlerts仅适用于iOS。
并且,driver.switchTo()。alert()。accept(); 仅适用于网络视图。
我正在使用Appium Inspector查找元素。 以下代码适用于本机应用-
WebElement allowButton = driver.findElements(By.xpath("//android.widget.Button[@resource-id='com.android.packageinstaller:id/permission_allow_button'])"));
allowButton.click();
后期发布。
您可以使用以下代码
capabilities.setCapability(“autoGrantPermissions”, true);
这将授予应用程序所有权限,并且不会要求任何权限。
要启用位置,最好的方法是
capabilities.setCapability("gpsEnabled", true);
该功能可以接受位置,存储,摄像头等应用许可
capabilities.setCapability("autoGrantPermissions", "true");
这将允许所有许可“是”
请注意:确保功能中的“ noReset”为“ true”。
有2种方法
通过设置如下所示的权限功能
capabilities.setCapability(“autoGrantPermissions”, true);
通过使用xpath
public WebElement alertPopup() { ele = driver.findElement(By.xpath("/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.ScrollView/android.widget.LinearLayout")); return ele; } public WebElement okBtnOnAlertPopup() { ele = driver.findElement(By.xpath("/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.ScrollView/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.Button[2]")); return ele; } public void alertPopupIsPresent() { boolean alertPopupDisplayed = alertPopup().isDisplayed(); System.out.println("alertPopupDisplayed - " + alertPopupDisplayed); if(alertPopupDisplayed){ System.out.println("Inside IF"); okBtnOnAlertPopup().click(); } }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.