appium chrome 浏览器的权限问题
Permission issue for appium chrome borwser
我正在远程 android 驱动程序上实施 appium 测试,使用 chrome 浏览器加载 url。
有些 Url 是 pdf,chrome 要求存储这些文件。并且似乎 chrome 没有访问文件系统来存储这些文件的权限,这会导致如下所示的对话框。
请帮助我在没有任何手动输入的情况下通过该对话框。
单击 continue
后,它将加载 Android 中的实际权限对话框。
这是我的代码初始化 appium 功能
DesiredCapabilities caps = DesiredCapabilities.android();
caps.setCapability("appiumVersion", "1.9.1");
caps.setCapability("deviceName","Samsung Galaxy S9 Plus HD GoogleAPI Emulator");
caps.setCapability("deviceOrientation", "portrait");
caps.setCapability("browserName", "Chrome");
caps.setCapability("platformVersion", "8.1");
caps.setCapability("platformName","Android");
caps.setCapability("autoAcceptAlerts", true);
caps.setCapability("autoGrantPermissions", true);
caps.setCapability("chromedriverArgs", "--allow-file-access-from-files");
caps.setCapability("maxDuration", 10000);
这是我用来加载 Url
的片段
driver.navigate().to("http://kmmc.in/wp-content/uploads/2014/01/lesson2.pdf");
autoGrantPermission
在这种情况下也不起作用,因为 chrome 已经安装。 Appium 团队已经拒绝了这个问题 -
https://github.com/appium/appium/issues/10008
请帮忙!
确实,我很难找到解决方案,但最终我找到了解决方法。
- 最好的解决方法是重新安装 chrome 包。我试过了,但是在重新安装后我无法启动 chrome,因为我无法访问 shell,并且 chrome 驱动程序抱怨。所以我离开了那条轨道。
- 我尝试获取
adb
命令或 mobile:changePermissions
但为此你需要在启动服务器时使用服务器标志 --relaxed-security
,并且 saucelabs 不提供任何方便的启动界面带有此标志的服务器。
不得已,我在这里找到了解决办法——。但这还不够,因为它帮助我修复了 chrome 警报,但后来又弹出了另一个带有 allow
和 deny
的警报,对此同一问题中的另一个解决方案有所帮助我。所以这是我最终使用的代码 -
driver.navigate().to("http://kmmc.in/wp-content/uploads/2014/01/lesson2.pdf");
String webContext = ((AndroidDriver)driver).getContext();
Set<String> contexts = ((AndroidDriver)driver).getContextHandles();
for (String context: contexts){
if (context.contains("NATIVE_APP")){
((AndroidDriver)driver).context(context);
break;
}
}
driver.findElement(By.id("android:id/button1")).click();
contexts = ((AndroidDriver)driver).getContextHandles();
for (String context: contexts){
if (context.contains("NATIVE_APP")){
((AndroidDriver)driver).context(context);
break;
}
}
driver.findElement(By.id("com.android.packageinstaller:id/permission_allow_button")).click();
((AndroidDriver)driver).context(webContext);
这有助于允许所需的所有权限。
我正在远程 android 驱动程序上实施 appium 测试,使用 chrome 浏览器加载 url。 有些 Url 是 pdf,chrome 要求存储这些文件。并且似乎 chrome 没有访问文件系统来存储这些文件的权限,这会导致如下所示的对话框。
请帮助我在没有任何手动输入的情况下通过该对话框。
单击 continue
后,它将加载 Android 中的实际权限对话框。
这是我的代码初始化 appium 功能
DesiredCapabilities caps = DesiredCapabilities.android();
caps.setCapability("appiumVersion", "1.9.1");
caps.setCapability("deviceName","Samsung Galaxy S9 Plus HD GoogleAPI Emulator");
caps.setCapability("deviceOrientation", "portrait");
caps.setCapability("browserName", "Chrome");
caps.setCapability("platformVersion", "8.1");
caps.setCapability("platformName","Android");
caps.setCapability("autoAcceptAlerts", true);
caps.setCapability("autoGrantPermissions", true);
caps.setCapability("chromedriverArgs", "--allow-file-access-from-files");
caps.setCapability("maxDuration", 10000);
这是我用来加载 Url
的片段 driver.navigate().to("http://kmmc.in/wp-content/uploads/2014/01/lesson2.pdf");
autoGrantPermission
在这种情况下也不起作用,因为 chrome 已经安装。 Appium 团队已经拒绝了这个问题 -
https://github.com/appium/appium/issues/10008
请帮忙!
确实,我很难找到解决方案,但最终我找到了解决方法。
- 最好的解决方法是重新安装 chrome 包。我试过了,但是在重新安装后我无法启动 chrome,因为我无法访问 shell,并且 chrome 驱动程序抱怨。所以我离开了那条轨道。
- 我尝试获取
adb
命令或mobile:changePermissions
但为此你需要在启动服务器时使用服务器标志--relaxed-security
,并且 saucelabs 不提供任何方便的启动界面带有此标志的服务器。
不得已,我在这里找到了解决办法——allow
和 deny
的警报,对此同一问题中的另一个解决方案有所帮助我。所以这是我最终使用的代码 -
driver.navigate().to("http://kmmc.in/wp-content/uploads/2014/01/lesson2.pdf");
String webContext = ((AndroidDriver)driver).getContext();
Set<String> contexts = ((AndroidDriver)driver).getContextHandles();
for (String context: contexts){
if (context.contains("NATIVE_APP")){
((AndroidDriver)driver).context(context);
break;
}
}
driver.findElement(By.id("android:id/button1")).click();
contexts = ((AndroidDriver)driver).getContextHandles();
for (String context: contexts){
if (context.contains("NATIVE_APP")){
((AndroidDriver)driver).context(context);
break;
}
}
driver.findElement(By.id("com.android.packageinstaller:id/permission_allow_button")).click();
((AndroidDriver)driver).context(webContext);
这有助于允许所需的所有权限。