如何在 Android 设备上处理允许/关闭地理位置弹出窗口
Posted
技术标签:
【中文标题】如何在 Android 设备上处理允许/关闭地理位置弹出窗口【英文标题】:How to handle allow/dismiss geo location popup on Android devices 【发布时间】:2021-11-25 22:31:52 【问题描述】:我想知道如何处理 android 设备上的地理位置弹出窗口
以下是一些高级细节
-
我正在使用 Saucelabs 云来运行我的脚本
我使用的是 Chrome 浏览器
Android 模拟器:三星 Galaxy S8 Plus 高清 GoogleAPI 模拟器
Android-真实设备:Samsung_Galaxy_S10_POC173
测试环境:Selenium、Java、testNg
我已经尝试了所有可能的方法来处理这个问题,附上我尝试过的代码sn-ps
最初我认为这是一个警报,并试图通过切换到警报来处理
driver.switchTo().alert().dismiss();
然后我尝试使用配置文件,但它适用于 windows 但不适用于 android
ChromeOptions options = new ChromeOptions();
DesiredCapabilities caps = DesiredCapabilities.android();
HashMap<String, Object> contentSettings = new HashMap<String, Object>();
HashMap<String, Object> profile = new HashMap<String, Object>();
HashMap<String, Object> prefs = new HashMap<String, Object>();
System.out.println("setting chrome options");
contentSettings.put("geolocation", 1);
profile.put("managed_default_content_settings", contentSettings);
prefs.put("profile", profile);
options.setExperimentalOption("prefs", prefs);*/
caps.setCapability(ChromeOptions.CAPABILITY, options);
driver = new RemoteWebDriver(new URL(pcUrl), caps);
然后我尝试了一些选项,但也无法处理弹出窗口
options.addArguments("start-maximized");
options.addArguments("test-type");
options.addArguments("enable-strict-powerful-feature-restrictions");
options.addArguments("disable-geolocation");
caps.setCapability(ChromeOptions.CAPABILITY, options);
caps = caps.merge(DesiredCapabilities.chrome());
我想在下面试试 https://www.browserstack.com/docs/automate/selenium/handle-permission-pop-ups#handle-know-your-location-pop-up
driver.context("NATIVE_APP");
driver.findElement(By.xpath(".//android.widget.Button[@text='Allow']")).click();
但我无法将 AndriodDriver 类型转换为 RemoteWebDriver,对此有任何建议
或者如果有任何其他可能的方式来实现这一点,请告诉我。
【问题讨论】:
【参考方案1】:您可以通过创建 Appium 会话来驱动 Mobile Chrome,而不是 Selenium。这应该允许您像在 Selenium 测试中那样与元素进行交互,但也可以更改为 NATIVE_APP
上下文以执行诸如关闭弹出窗口之类的操作。
您需要进行一些更改:
-
创建
AndroidOptions
的实例而不是ChromeOptions
,然后将browserName
功能设置为Chrome
创建AppiumDriver
类型的WebElement
而不是RemoteWebDriver
我能够像这样运行会话并关闭弹出窗口:
AndroidOptions options = new AndroidOptions();
options.setCapability("deviceName","Google Pixel 3a GoogleAPI Emulator" );
options.setCapability("platformVersion", "11.0");
options.setCapability("automationName", "UIAutomator2");
options.setCapability("browserName", "Chrome");
Map<String, Object> sauceOptions = new HashMap<>();
sauceOptions.put("name", "WW");
sauceOptions.put("appiumVersion", "1.20.2");
options.setCapability("sauce:options", sauceOptions);
AppiumDriver<WebElement> driver = new AppiumDriver<WebElement>(new URL(address),options);
driver.context("NATIVE_APP");
driver.findElement(By.xpath(".//android.widget.Button[@text='Allow']")).click();
您可能还必须关闭 Android 本身的第二个弹出窗口:
driver.findElement(By.xpath(".//android.widget.Button[@text='While using the app']")).click();
【讨论】:
以上是关于如何在 Android 设备上处理允许/关闭地理位置弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章
如何允许远程访问我的移动(Android)WAMP服务器[关闭]