我是appium的新手并尝试自动化应用。我在Java中的脚本无法识别文本框字段。
MobileElement code = driver.findElement(By.id("some-id"));
WebDriverWait wait2 = new WebDriverWait(driver, 5);
wait2.until(ExpectedConditions.elementToBeClickable(code));
code.click();
code.sendKeys("abc");
我在控制台中收到以下错误。
2018年5月23日下午5:34:39 org.openqa.selenium.remote.ProtocolHandshake createSession 信息:检测到的方言:OSS 线程“main”中的异常org.openqa.selenium.NoSuchElementException:使用给定的搜索参数无法在页面上找到元素。 (警告:服务器未提供任何堆栈跟踪信息) 命令持续时间或超时:0毫秒 有关此错误的文档,请访问:http://seleniumhq.org/exceptions/no_such_element.html 构建信息:版本:'3.12.0',修订版:'7c6e0b3',时间:'2018-05-08T14:04:26.12Z' 系统信息:主机:'N0PCINF651RBHT',ip:'100.118.94.148',os.name:'Windows 7',os.arch:'amd64',os.version:'6.1',java.version:'1.8.0_71 “ 驱动程序信息:io.appium.java_client.android.AndroidDriver 功能{appActivity:nz.co.mcom.phone.login.Spla ...,appPackage:com.fiserv.touchbanking,databaseEnabled:false,desired:{appActivity:nz.co.mcom.phone.login.Spla ... ,appPackage:com.fiserv.touchbanking,deviceName:Samsung,platformName:android,platformVersion:7.0},deviceManufacturer:samsung,deviceModel:SM-G950F,deviceName:ce03171399d964fa0c,deviceScreenSize:1440x2960,deviceUDID:ce03171399d964fa0c,javascriptEnabled:true,locationContextEnabled: false,networkConnectionEnabled:true,platform:LINUX,platformName:LINUX,platformVersion:7.0,takesScreenshot:true,warnings:{},webStorageEnabled:false} 会议ID:58013355-1b58-4c8d-895f-7a57144e0595 ***元素信息:{Using = id,value = com.fiserv.touchbanking:id / AppCodeTextBox} at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 在org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:214) 在org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:166) 在org.openqa.selenium.remote.http.JsonHttpResponseCodec.reconstructValue(JsonHttpResponseCodec.java:40) 在org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:80) 在org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:44) 在org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158) 在io.appium.java_client.remote.AppiumCommandExecutor.execute(AppiumCommandExecutor.java:129) 在org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:543) at io.appium.java_client.DefaultGenericMobileDriver.execute(DefaultGenericMobileDriver.java:42) at io.appium.java_client.AppiumDriver.execute(AppiumDriver.java:1) 在io.appium.java_client.android.AndroidDriver.execute(AndroidDriver.java:1) 在org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:317) at io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:62) at io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1) 在io.appium.java_client.android.AndroidDriver.findElement(AndroidDriver.java:1) 在org.openqa.selenium.remote.RemoteWebDriver.findElementById(RemoteWebDriver.java:363) at io.appium.java_client.DefaultGenericMobileDriver.findElementById(DefaultGenericMobileDriver.java:70) at io.appium.java_client.AppiumDriver.findElementById(AppiumDriver.java:1) at io.appium.java_client.android.AndroidDriver.findElementById(AndroidDriver.java:1) 在org.openqa.selenium.By $ ById.findElement(By.java:188) 在org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:309) at io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:58) at io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1) 在io.appium.java_client.android.AndroidDriver.findElement(AndroidDriver.java:1) 在mytests.LaunchTouchbankingApp.main(LaunchTouchbankingApp.java:50)
Appium服务器中的Bootstrap日志如下: -
[AndroidBootstrap] [BOOTSTRAP LOG] [debug]得到ACTION类型的命令 [AndroidBootstrap] [BOOTSTRAP LOG] [debug]得到命令动作:find [AndroidBootstrap] [BOOTSTRAP LOG] [debug]使用带有contextId的'ID'查找'com.fiserv.touchbanking:id / AppCodeTextBox':''multiple:false
你的帮助非常明显。感谢。
答案 0 :(得分:0)
返回的异常似乎只是因为在您搜索时未在UI中找到该元素。
请注意,在您发布的代码段中,由id' some-id'标识的元素将在第一行执行后搜索,而不是在您尝试单击元素时搜索。您是否在driver.findElement(By.id("some-id"));
上执行任何类型的隐式等待?如果没有,当您第一次尝试在UI中找到它时,您确定该元素可用吗?
要确保该元素实际可用,您可以在执行findBy之前检查它是否出现在页面源中。在Java中,你可以这样做:
System.out.println(driver.getPageSource());