问题描述
过去几天我一直被这个问题困扰。任何人都可以提供帮助或提供一些关于如何实现的想法。
我在做什么/在哪里表演:
- 浏览器: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 > 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)