hybrid-mobile-app - 检查混合应用程序时出现问题。找不到所需的选择器
问题描述
我正在使用 Appium 使用真实的移动设备自动化混合应用程序。所以我的代码写如下:
DesiredCapabilities capabilities = new DesiredCapabilities();
//capabilities.setCapability(CapabilityType.BROWSER_NAME,"Chrome");
capabilities.setCapability("deviceName", "77377f50");
capabilities.setCapability("platformVersion", "9");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("automationName", "uiautomator2");
capabilities.setCapability("autoWebview", "true");
capabilities.setCapability("appium:chromeOptions", ImmutableMap.of("w3c", false));
capabilities.setCapability("appPackage", "com.englishbolo.android.alpha");
capabilities.setCapability("appActivity", "com.englishbolo.android.ui.EnglishBoloSplashScreen filter 36b63470");
capabilities.setCapability(MobileCapabilityType.FULL_RESET,false);
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
Set <String> contextNames = driver.getContextHandles();
for (String contextName : contextNames)
{
System.out.println("Available Context:"+contextName);
}
driver.context((String) contextNames.toArray()[1]);
driver.findElement(By.xpath("//android.view.View[contains(@resource-id,'en_US')]")).click();
driver.findElement(By.xpath("//android.widget.Button[contains(@resource-id,'OK')]")).click();
driver.findElement(By.xpath("//android.view.View[@text='SIGNUP FREE']")).click();
driver.findElementByClassName("android.widget.Spinner").click();
driver.findElementByXPath("//android.widget.EditText[contains(@resource-id,'userFullName')]").sendKeys("ebuat");
driver.findElementByXPath("//android.view.View[@text='Sri Lanka+94']").click();
driver.findElementByXPath("//android.widget.EditText[contains(@resource-id,'userPhone')]").sendKeys("744693540");
driver.findElementByXPath("//android.widget.EditText[contains(@resource-id,'userPassword')]").sendKeys("1234");
driver.findElementByXPath("//android.widget.EditText[contains(@resource-id,'userMailId')]").sendKeys("ebuatuser_nov18@sharklasers.com");
driver.hideKeyboard();
driver.findElementByXPath("//android.widget.Button[@text='SUBMIT']").click();
driver.findElementByXPath("//android.widget.Button[@text='START NOW']").click();
在最后一次单击操作之后,我需要单击单选按钮,但在 appium 桌面中检查后,只存在作为定位器的类。
对于所有单选按钮类android.view.View
是存在的定位器。
我已经使用 xpath 使用类名,文本 * 资源 ID 存在。如果只存在类名那么我如何形成 xpath 来单击单选按钮?
Set <String> contextNames = driver.getContextHandles();
for (String contextName : contextNames)
{
System.out.println("Available Context:"+contextName);
}
driver.context((String) contextNames.toArray()[1]);
我还编写getContextHandles
了将视图设置为 WebView 的方法。
编写此方法后观察到的错误:
INFO: HTTP Status: '400' -> incorrect JSON status mapping for 'unknown error' (500 expected)
Exception in thread "main" org.openqa.selenium.SessionNotCreatedException: Unable to create a new remote session. Please check the server log for more details. Original error: No such context found.
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'englishhelper-MS-7A15', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.15.0-52-generic', java.version: '12.0.1'
Driver info: driver.version: AndroidDriver
remote stacktrace: NoSuchContextError: No such context found.
at AndroidUiautomator2Driver.setContext (/tmp/.mount_AppiumZrt5AD/resources/app/node_modules/appium/node_modules/appium-android-driver/lib/commands/context.js:57:11)
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'englishhelper-MS-7A15', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.15.0-52-generic', java.version: '12.0.1'
Driver info: driver.version: AndroidDriver
at io.appium.java_client.remote.AppiumCommandExecutor$1.createSession(AppiumCommandExecutor.java:208)
at io.appium.java_client.remote.AppiumCommandExecutor.createSession(AppiumCommandExecutor.java:217)
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 org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
at io.appium.java_client.DefaultGenericMobileDriver.<init>(DefaultGenericMobileDriver.java:38)
at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:84)
at io.appium.java_client.AppiumDriver.<init>(AppiumDriver.java:94)
at io.appium.java_client.android.AndroidDriver.<init>(AndroidDriver.java:95)
at appium_new.AppiumSignup.main(AppiumSignup.java:62)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at io.appium.java_client.remote.AppiumCommandExecutor$1.createSession(AppiumCommandExecutor.java:186)
... 13 more
Caused by: org.openqa.selenium.WebDriverException: No such context found.
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'englishhelper-MS-7A15', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.15.0-52-generic', java.version: '12.0.1'
Driver info: driver.version: AndroidDriver
remote stacktrace: NoSuchContextError: No such context found.
at AndroidUiautomator2Driver.setContext (/tmp/.mount_AppiumZrt5AD/resources/app/node_modules/appium/node_modules/appium-android-driver/lib/commands/context.js:57:11)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$errorHandler$0(W3CHandshakeResponse.java:62)
at org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30)
at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:127)
at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:502)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:543)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128)
... 18 more
你能帮我解决你可能知道的解决方案吗?
解决方案
推荐阅读
- java - Gson 'fromJson' 问题
- file - 如何从 csv 文件中读取数据并将其存储在数据库中?弹簧靴
- reactjs - 用视差反应原生 swiper
- bash - 使用 awk 将字典映射应用于文件的列
- xcode - 用 '[String : CLLocation]' 快速添加两个数组
- r - 如何将此 R 脚本转换为闪亮的应用程序?
- ubuntu - 如何在不知道安装路径的情况下卸载boost
- javascript - 用于在 javascript 中输入值的正则表达式
- dask - 在集群上运行的 Dask 程序中找不到文件错误
- android - Firestore 令牌检索失败:INVALID_SENDER