#java #android #selenium #browserstack
Вопрос:
Я застрял с этой проблемой в последние несколько дней. Может ли кто-нибудь, пожалуйста, помочь или дать некоторое представление о том, как этого можно достичь.
Что/где я выступаю:
- Браузер: Chrome
- Устройство: Samsung Galaxy S20
- Удаленный: Стек браузера
- Тест: Selenium с подключением Java к стеку браузера
Я перепробовал множество способов отключить всплывающее окно «Местоположение», появляющееся при переходе по URL-адресу, но каждый раз Selenium tests даже не отклоняет и не распознает это предупреждение. Ниже приведено изображение всплывающего окна с указанием местоположения устройства, которое я получаю при навигации:
Код, который я пробовал:
Возможности:
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);
Я видел во многих местах добавление «Автогрантий». Пробовал и это, но ничего не вышло
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
контексте. Любое предупреждение, которое не является частью веб-страницы, обычно отображается в СОБСТВЕННОМ контексте.
Это предупреждение должно обрабатываться через Appium, как указано здесь:
driver.switch_to.context('NATIVE_APP')
driver.find_element_by_xpath(".//android.widget.Button[@text='Allow']").click()
time.sleep(2)
Комментарии:
1. Привет, Шон, спасибо. Я попытался использовать «driver.switchTo().context ()», но, похоже, «context()» отсутствует в Java для switchTo(). Не могли бы вы, пожалуйста, дать некоторое представление о том, как этого можно достичь? Это «AndroidDriver» или «Удаленная река» ?
2. Я понял. Спасибо, Шон. Принял ваш ответ