Всем доброго времени суток!
В попытке автоматизировать PhoneGap приложение, практически со старта наткнулся на одну очень неприятную штуку - не могу работать с webview этого приложения.
Вся хитрость в том, что логин в приложение осуществляется через webview которое создает Salesforce, а само приложение находится в другом webview, переключиться/достучаться/увидеть которое у меня не выходит.
Внизу приведу пару скриншотов и код, которым пытаюсь это сделать, может, уже на этом этапе будут видны ошибки.
Использую: Python 3.4.3, Appium 1.4.12, эмулированный через Genymotion - Nexus 5 - Android 4.4.4
- Для начала передаю капабилити, ставлю апп и запускаю его:
class LoginAndroidTests(unittest.TestCase):
def setUp(self):
desired_caps = {}
desired_caps[‘platformName’] = ‘Android’
desired_caps[‘platformVersion’] = ‘4.4.4’
desired_caps[‘deviceName’] = ‘Google Nexus 5 - 4.4.4 - API 19 - 1080x1920’
desired_caps[‘app’] = PATH(‘./appname.apk’)
desired_caps[‘appPackage’] = ‘com.xxx.app’
desired_caps[‘appActivity’] = ‘com.xxx.app.activities.appname’
desired_caps[‘appWaitActivity’] = ‘com.salesforce.androidsdk.ui.LoginActivity’
self.driver = webdriver.Remote(‘http://localhost:4723/wd/hub’, desired_caps)
- Дождавшись - вывожу список активити:
print(driver.contexts)
получаю:
[‘NATIVE_APP’, ‘WEBVIEW_com.xxx.app’]
Все что надо - есть, переключаю сервер на тестовый используя нативный контекст и нативные локаторы, тут все ок, потом - переключаю контекст на webview в которой находится логин форма, заполняю ее:
driver.switch_to.context(‘WEBVIEW_com.xxx.app’)
driver.find_element_by_css_selector(“input#username”).send_keys(“login”)
driver.find_element_by_css_selector(“input#password”).send_keys(“Pass”)
driver.find_element_by_css_selector(“input#Login”).submit()
И подтверждаю логин, адрес другой, но webview, с виду, та же.
А вот теперь самое интересное, после логина (контекст по прежнему - webview) отображается первый экран уже непосредственно самого апликейшена, а с ним появляется и новая webview, ее я прекрасно вижу в инспекторе Chrome (1 на скриншоте), но когда я в коде пытаюсь что-то на ней найти, самый банальный инпут - не выходит. Смотрю в чем дело - возвращаю все HTML-элементы из текущего webview и оказывается, что я “нахожусь” на webview страницы аутентификации (2 на скриншоте).
Подытоживая, вопрос: можно ли как-то вручную менять webview, при том что список контекстов ([‘NATIVE_APP’, ‘WEBVIEW_com.xxx.app’]) всегда остается одним и тем же? Разве Appium, само приложение не должно делать видимое webview активным, чтобы тест мог взаимодействовать с ним?
Про то, что может существовать несколько webview-контекстов читал, но имею только то, что выше привел в списке. Нагуглить схожую проблему не удалось, так что даже не знаю куда копать. Заранее спасибо за любой совет или мнение)
P.S. Код не отформатирован, потому что тег этот глючил, не позволяя создать тему %)