如何在 Android 设备上关闭/接受设备位置弹出窗口 - Selenium with Browser stack

Posted

技术标签:

【中文标题】如何在 Android 设备上关闭/接受设备位置弹出窗口 - Selenium with Browser stack【英文标题】:How to dismiss/accept Device Location Popup on Android devices - Selenium with Browser stack 【发布时间】:2021-09-29 13:04:55 【问题描述】:

过去几天我一直被这个问题困扰。任何人都可以请帮助或提供一些关于如何实现它的想法。

我在做什么/在哪里表演:

    浏览器:Chrome 设备:三星 Galaxy S20 远程:浏览器堆栈 测试:Selenium 与 Java 连接浏览器堆栈

我尝试了许多方法来消除导航到 URL 后出现的位置弹出窗口,但每次 Selenium 测试甚至都不会消除或识别该警报。下面是我在导航时收到的设备位置弹出窗口的图片:

我尝试过的代码:

能力:

    caps.setCapability("os_version", "10.0");
    caps.setCapability("device", "Samsung Galaxy S20");
    caps.setCapability("realMobile", "true");
    caps.setCapability("browser", "Chrome");
    caps.setCapability("browserstack.debug", "true");
    caps.setCapability("browserstack.console", "errors");
    caps.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.ACCEPT);
    caps.setCapability("name", scenario);

我在很多地方都看到过添加“Autograntpermissions”。也试过了,还是不行

caps.setCapability("autoGrantPermissions", "true");

我尝试了通常的切换到警报并关闭它或接受它,但它也不起作用。抛出“没有这样的警报”

driver.switchTo().alert().dismiss(); 

我想,也许这可以通过添加配置文件来工作,但它似乎也没有检测到并且总是弹出窗口仍然存在

ChromeOptions options = new ChromeOptions();
Map < String, Object > prefs = new HashMap < String, Object > ();
Map < String, Object > profile = new HashMap < String, Object > ();
Map < String, Object > contentSettings = new HashMap < String, Object > ();

contentSettings.put("geolocation", 1);
profile.put("managed_default_content_settings", contentSettings);
prefs.put("profile", profile);
options.setExperimentalOption("prefs", prefs);

caps.setCapability(ChromeOptions.CAPABILITY, options);
//... other capabilities

【问题讨论】:

【参考方案1】:

警报由网页上的JS触发,但显示在NATIVE_APP上下文中。任何不属于网页的警报通常都会显示在 NATIVE 上下文中。

此警报需要通过 Appium 处理,如下所述:

https://www.browserstack.com/docs/automate/selenium/handle-permission-pop-ups#handle-know-your-location-pop-up

driver.switch_to.context('NATIVE_APP')
driver.find_element_by_xpath(".//android.widget.Button[@text='Allow']").click()
time.sleep(2)

【讨论】:

嗨,肖恩,谢谢。我尝试使用“driver.switchTo().context()”,但对于 SwitchTo(),Java 中似乎不存在“context()”。您能否提供一些关于如何实现这一目标的想法?这是“AndroidDriver”还是“RemoteDriver”? 我明白了。谢谢肖恩。接受你的回答

以上是关于如何在 Android 设备上关闭/接受设备位置弹出窗口 - Selenium with Browser stack的主要内容,如果未能解决你的问题,请参考以下文章

如何从一个 android 设备检索 GPS 位置并将其实时提供给另一台 android 设备 [关闭]

跟踪 Android 设备的位置 [关闭]

如何使用javascript强制关闭android键盘

选择播放设备后如何隐藏播放弹出窗口?

如何在android设备上读取cpu频率[关闭]

基于移动设备上点击位置的下拉列表弹出 CSS