如何在 Android 设备上 dismiss/accept 设备位置弹出窗口 - 带浏览器堆栈的 Selenium
How to dismiss/accept Device Location Popup on Android devices - Selenium with Browser stack
过去几天我一直被这个问题困扰。任何人都可以帮助或提供一些关于如何实现它的想法。
What/Where我正在表演:
- 浏览器:Chrome
- 设备:三星 Galaxy S20
- 远程:浏览器堆栈
- 测试:Selenium Java 连接浏览器堆栈
我尝试了很多方法来关闭显示 post 的位置弹出窗口,导航到 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
该警报由网页上的 JS 触发,但显示在 NATIVE_APP
上下文中。不属于网页一部分的任何警报通常会显示在 NATIVE 上下文中。
此警报需要通过此处提到的 Appium 处理:
driver.switch_to.context('NATIVE_APP')
driver.find_element_by_xpath(".//android.widget.Button[@text='Allow']").click()
time.sleep(2)
过去几天我一直被这个问题困扰。任何人都可以帮助或提供一些关于如何实现它的想法。
What/Where我正在表演:
- 浏览器:Chrome
- 设备:三星 Galaxy S20
- 远程:浏览器堆栈
- 测试:Selenium Java 连接浏览器堆栈
我尝试了很多方法来关闭显示 post 的位置弹出窗口,导航到 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
该警报由网页上的 JS 触发,但显示在 NATIVE_APP
上下文中。不属于网页一部分的任何警报通常会显示在 NATIVE 上下文中。
此警报需要通过此处提到的 Appium 处理:
driver.switch_to.context('NATIVE_APP')
driver.find_element_by_xpath(".//android.widget.Button[@text='Allow']").click()
time.sleep(2)