Есть приложение на #android Страница логина - WebView, дальше Hybrid app.
Все настройки делала под Hybrid app (WebView добавили недавно), каким образом и где определить переключение на WebView?
Создала класс:
public void changeToWebview() { getDriver().context("WEBVIEW"); }
и обращаюсь к нему из шагов уже:
@Given("^I'm on a startup screen$")
public void verifyISeeStartupScreen() throws Throwable {
System.out.println("I am on startup screen");
loginPage.changeToWebview();
loginPage.waitForPageVisible();
throw new PendingException();
}
Как я поняла структуру при запуске:
устанавливается приложение,
открывается страница login (WebView),
переход на WebView (в коде),
wait (уже основываясь на локаторы)
работа с локаторами.
Может, не ясно что-то выложила и не так прописала - только начинаю с автоматизацией так что буду рада советам и рекомендациям
Переключение в webView контекст лучше делать неявно (не в тестах). А в самом тесте лучше использовать методы пейджи, например
loginPage.loginAs(validUser);
А переключение контекста скрыть в этот метод:
public HomePage loginAs(User user) {
switchToContext(WEB_VIEW);
//some actions
switchToContext(NATIVE_APP);
return new HomePage();
}
Но стоит заметить, что часто webView элементы, особенно в Android, видны и в нативном контексте. Проверьте в Аппиум-инспекторе, возможно, Вам и не придется делать это переключение между Web View и Native App.
Во-первых посмотрите что вам возвращает getContext()
Ибо у меня контекс для вебвью возвращается с таким именем - “WEBVIEW_1”
Во-вторых я бы советовал для инспекции элементов андроида юзать что-то родное из AndroidSDK, например утилитку monitor
На форуме даже есть тема с обсуждением таким - Получение локаторов элементов для appium - #3 от пользователя evgmoskalenko
Вот очень нужный ответ! Только столкнулась с этим моментом : как же записать WEBVIEW, что б это распозналось, где я могу это посмотреть?
Я использую monitor для инспекции.
Appium inspector не работает у меня)
Через uiautomatorviewer, страница отображается одним классом (WebView) без каких-либо элементов. К ним (элементам) могу добраться только через monitor. При попытке запустить тест без переключений выдает ошибку " NoSuchElementException: Can’t locate an element by this strategy: [unknown locator] " -
Ну пусть через monitor, то что он вам показывает работайте с этими элементами через native_view
Я на этот момент хотел обратить ваше внимание, а не на инспектора
Дело в том, что в нем не было установлено вот это:
Обратилась к программистам и они изменили чуток код и выдали новый файл.
Сейчас получила новый билд с возможностью дебаггинга. И в ответе уже отображается WEBVIEW_com…
Буду пробовать тест запускать и отпишусь помогли ли изменения в коде.
С этим справилась, появился другой вопрос:
объявление локаторов происходило следующим образом @AndroidFindBy (id = “verify_user_btn”)
public MobileElement nextBtn;
Каким образом их объявлять для webview (не смогла в интернете найти)?