Switch context and interact with webview

Hello,

I am automating a Mobile Ntive App on Android.
On action will open a form in a webview.
I used:
Mobile.switchToWebView()

and then I wanted to enter a text in a textfield in this webview.
I used:

Mobile.sendKeys(findTestObject('path/to/Password field', [('package') : GlobalVariable.G_Package]),
			 'test')

and I also tried

Mobile.tap(findTestObject('path/to/Password field', [('package') : GlobalVariable.G_Package]),
			0)

Mobile.setText(findTestObject('path/to/Password field', [('package') : GlobalVariable.G_Package]),
			'test', 0)

without success.
I obtain each time:

2019-10-08 15:33:38.155 ERROR c.k.k.core.keyword.internal.KeywordMain - ❌ Failed to set text into element (Root cause: org.openqa.selenium.InvalidElementStateException: io.appium.uiautomator2.common.exceptions.InvalidElementStateException: Cannot set the element to 'test'. Did you interact with the correct element?

at io.appium.uiautomator2.handler.SendKeysToElement.safeHandle(SendKeysToElement.java:97)

at io.appium.uiautomator2.handler.request.SafeRequestHandler.handle(SafeRequestHandler.java:37)

at io.appium.uiautomator2.server.AppiumServlet.handleRequest(AppiumServlet.java:252)

at io.appium.uiautomator2.server.AppiumServlet.handleHttpRequest(AppiumServlet.java:243)

at io.appium.uiautomator2.http.ServerHandler.channelRead(ServerHandler.java:44)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)

at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)

at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)

at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)

at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:435)

at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)

at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)

at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:250)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)

at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)

at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1294)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)

at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)

at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:911)

at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)

at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:611)

at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:552)

at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:466)

at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:438)

at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:140)

at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)

at java.lang.Thread.run(Thread.java:764)

Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:25:53'

System info: host: 'ip-192-168-8-129.eu-west-1.compute.internal', ip: 'fe80:0:0:0:109f:7985:34e9:4ca6%en0', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.14.6', java.version: '1.8.0_181'

Driver info: com.kms.katalon.core.appium.driver.SwipeableAndroidDriver

Capabilities {app: /Users/quentin/Documents/QA..., appPackage: _mypackage_, appWaitActivity: *, autoGrantPermissions: true, automationName: uiautomator2, databaseEnabled: false, desired: {app: /Users/quentin/Documents/QA..., appWaitActivity: *, autoGrantPermissions: true, automationName: uiautomator2, deviceId: , deviceName: emulator-5554 (Android SDK ..., fullReset: false, newCommandTimeout: 1800, noReset: true, platform: ANDROID, platformName: android, platformVersion: 9, resetKeyboard: true, systemPort: 63402, udid: emulator-5554}, deviceApiLevel: 28, deviceId: , deviceManufacturer: Google, deviceModel: Android SDK built for x86_64, deviceName: emulator-5554, deviceScreenDensity: 420, deviceScreenSize: 1080x1920, deviceUDID: emulator-5554, fullReset: false, javascriptEnabled: true, locationContextEnabled: false, networkConnectionEnabled: true, newCommandTimeout: 1800, noReset: true, pixelRatio: 2.625, platform: ANDROID, platformName: Android, platformVersion: 9, resetKeyboard: true, statBarHeight: 63, systemPort: 63402, takesScreenshot: true, udid: emulator-5554, viewportRect: {height: 1731, left: 0, top: 63, width: 1080}, warnings: {}, webStorageEnabled: false}

Session ID: c59227d0-b885-46e8-b594-c22750aa52cb

at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)

at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)

at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)

at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)

at io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:239)

at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)

at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42)

at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1)

at io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1)

at com.kms.katalon.core.appium.driver.SwipeableAndroidDriver.execute(SwipeableAndroidDriver.java:1)

at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:285)

at io.appium.java_client.DefaultGenericMobileElement.execute(DefaultGenericMobileElement.java:45)

at io.appium.java_client.MobileElement.execute(MobileElement.java:1)

at io.appium.java_client.android.AndroidElement.execute(AndroidElement.java:1)

at org.openqa.selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.java:106)

at com.kms.katalon.core.mobile.keyword.builtin.SetTextKeyword$_setText_closure1.doCall(SetTextKeyword.groovy:80)

at com.kms.katalon.core.mobile.keyword.builtin.SetTextKeyword$_setText_closure1.call(SetTextKeyword.groovy)

at com.kms.katalon.core.mobile.keyword.internal.MobileKeywordMain.runKeyword(MobileKeywordMain.groovy:21)

at com.kms.katalon.core.mobile.keyword.builtin.SetTextKeyword.setText(SetTextKeyword.groovy:83)

at com.kms.katalon.core.mobile.keyword.builtin.SetTextKeyword.execute(SetTextKeyword.groovy:66)

at com.kms.katalon.core.keyword.internal.KeywordExecutor.executeKeywordForPlatform(KeywordExecutor.groovy:56)

at com.kms.katalon.core.mobile.keyword.MobileBuiltInKeywords.setText(MobileBuiltInKeywords.groovy:491)

at com.kms.katalon.core.mobile.keyword.MobileBuiltInKeywords$setText$11.call(Unknown Source)

at AddBank.I_am_able_to_fill_credentials(AddBank.groovy:173)

at cucumber.runtime.Utils$1.call(Utils.java:26)

at cucumber.runtime.Timeout.timeout(Timeout.java:16)

at cucumber.runtime.Utils.invoke(Utils.java:20)

at cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:48)

at cucumber.runtime.PickleStepDefinitionMatch.runStep(PickleStepDefinitionMatch.java:50)

at cucumber.runner.TestStep.executeStep(TestStep.java:55)

at cucumber.runner.TestStep.run(TestStep.java:42)

at cucumber.runner.PickleStepTestStep.run(PickleStepTestStep.java:53)

at cucumber.runner.TestCase.run(TestCase.java:47)

at cucumber.runner.Runner.runPickle(Runner.java:44)

at cucumber.runtime.Runtime.runFeature(Runtime.java:120)

at cucumber.runtime.Runtime.run(Runtime.java:106)

at cucumber.api.cli.Main.run(Main.java:35)

at cucumber.api.cli.Main$run.call(Unknown Source)

at com.kms.katalon.core.cucumber.keyword.CucumberBuiltinKeywords$_runFeatureFile_closure1.doCall(CucumberBuiltinKeywords.groovy:76)

at com.kms.katalon.core.cucumber.keyword.CucumberBuiltinKeywords$_runFeatureFile_closure1.doCall(CucumberBuiltinKeywords.groovy)

at com.kms.katalon.core.keyword.internal.KeywordMain.runKeyword(KeywordMain.groovy:68)

at com.kms.katalon.core.keyword.internal.KeywordMain$runKeyword.call(Unknown Source)

at com.kms.katalon.core.cucumber.keyword.CucumberBuiltinKeywords.runFeatureFile(CucumberBuiltinKeywords.groovy:46)

at com.kms.katalon.core.cucumber.keyword.CucumberBuiltinKeywords$runFeatureFile$0.callStatic(Unknown Source)

at com.kms.katalon.core.cucumber.keyword.CucumberBuiltinKeywords.runFeatureFile(CucumberBuiltinKeywords.groovy:101)

at com.kms.katalon.core.cucumber.keyword.CucumberBuiltinKeywords$runFeatureFile.call(Unknown Source)

at Add Bank Runner.run(Add Bank Runner:3)

at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194)

at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:119)

at com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:337)

at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:328)

at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:307)

at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:299)

at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:233)

at com.kms.katalon.core.main.TestSuiteExecutor.accessTestCaseMainPhase(TestSuiteExecutor.java:169)

at com.kms.katalon.core.main.TestSuiteExecutor.accessTestSuiteMainPhase(TestSuiteExecutor.java:142)

at com.kms.katalon.core.main.TestSuiteExecutor.execute(TestSuiteExecutor.java:91)

at com.kms.katalon.core.main.TestCaseMain.startTestSuite(TestCaseMain.java:157)

at com.kms.katalon.core.main.TestCaseMain$startTestSuite$0.call(Unknown Source)

at TempTestSuite1570541581759.run(TempTestSuite1570541581759.groovy:35)

any idea? Or does someone knows how to correctly interact with WEBVIEW context using Katalon ?

Hi @Quentin_Valero, any luck solving this as I’m facing the same issue