【发布时间】:2020-05-30 05:35:57
【问题描述】:
if (driver.findElement(By.id(id)).isDisplayed()) {
}
元素不可用时总是执行失败?
环境:
Appium 1.15.1
java客户端7.3.0
硒-java 3.141.59
错误日志:
Android Loding 问题页面
org.openqa.selenium.NoSuchElementException: Can't locate an element by this strategy: By.chained({By.AccessibilityId: OK}) 在 io.appium.java_client.pagefactory.AppiumElementLocator.findElement(AppiumElementLocator.java:126) 在 io.appium.java_client.pagefactory.interceptors.InterceptorOfASingleElement.intercept(InterceptorOfASingleElement.java:59) 在 io.appium.java_client.ios.IOSElement$$EnhancerByCGLIB$$d311658.isDisplayed() 在 在✽。并验证侧面菜单列表正在导航到带有 OnBoared User 的相应屏幕(:12) 原因:org.openqa.selenium.TimeoutException:预期条件失败:等待 io.appium.java_client.pagefactory.AppiumElementLocator$WaitingFunction@66ba7e45(尝试 1 秒,间隔 500 毫秒) 在 org.openqa.selenium.support.ui.FluentWait.timeoutException(FluentWait.java:304) 在 org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:272) 在 io.appium.java_client.pagefactory.AppiumElementLocator.waitFor(AppiumElementLocator.java:99) 在 io.appium.java_client.pagefactory.AppiumElementLocator.findElement(AppiumElementLocator.java:119) 在 io.appium.java_client.pagefactory.interceptors.InterceptorOfASingleElement.intercept(InterceptorOfASingleElement.java:59) 在 io.appium.java_client.ios.IOSElement$$EnhancerByCGLIB$$d311658.isDisplayed() 在 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 cucumber.runtime.Utils$1.call(Utils.java:40) 在 cucumber.runtime.Timeout.timeout(Timeout.java:16) 在 cucumber.runtime.Utils.invoke(Utils.java:34) 在 cucumber.runtime.java.JavaStepDefinition.execute(JavaStepDefinition.java:38) 在 cucumber.runtime.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37) 在 cucumber.runtime.Runtime.runStep(Runtime.java:300) 在 cucumber.runtime.model.StepContainer.runStep(StepContainer.java:44) 在 cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39) 在 cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:44) 在 cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:102) 在 cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63) 在 cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:363) 在 cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70) 在 cucumber.api.junit.Cucumber.runChild(Cucumber.java:95) 在 cucumber.api.junit.Cucumber.runChild(Cucumber.java:38) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 在 org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 在 org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:363) 在 cucumber.api.junit.Cucumber.run(Cucumber.java:100) 在 org.junit.runner.JUnitCore.run(JUnitCore.java:137) 在 org.junit.runner.JUnitCore.run(JUnitCore.java:115) 在 org.junit.vintage.engine.execution.RunnerExecutor.execute(RunnerExecutor.java:39) 在 java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) 在 java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) 在 java.util.Iterator.forEachRemaining(Iterator.java:116) 在 java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) 在 java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) 在 java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) 在 java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) 在 java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174) 在 java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 在 java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) 在 org.junit.vintage.engine.VintageTestEngine.executeAllChildren(VintageTestEngine.java:79) 在 org.junit.vintage.engine.VintageTestEngine.execute(VintageTestEngine.java:70) 在 org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:220) 在 org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:188) 在 org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:202) 在 org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:181) 在 org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128) 在 org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:89) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209) 原因:org.openqa.selenium.NoSuchElementException: 无法使用 By.chained({By.AccessibilityId: OK}) 定位元素 有关此错误的文档,请访问:https://www.seleniumhq.org/exceptions/no_such_element.html 构建信息:版本:'3.141.59',修订:'e82be7d358',时间:'2018-11-14T08:17:03' 系统信息:主机:'Elites-MacBook-Pro-4.local',ip:'fe80:0:0:0:1c56:6e8a:fceb:a653%en0',os.name:'Mac OS X',os .arch:'x86_64',os.version:'10.15.3',java.version:'1.8.0_201' 驱动信息:driver.version:IOSDriver 在 io.appium.java_client.pagefactory.bys.builder.ByChained.findElement(ByChained.java:74) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:315) 在 io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:57) 在 io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1) 在 io.appium.java_client.ios.IOSDriver.findElement(IOSDriver.java:1) 在 io.appium.java_client.pagefactory.bys.ContentMappedBy.findElement(ContentMappedBy.java:50) 在 org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:315) 在 io.appium.java_client.DefaultGenericMobileDriver.findElement(DefaultGenericMobileDriver.java:57) 在 io.appium.java_client.AppiumDriver.findElement(AppiumDriver.java:1) 在 io.appium.java_client.ios.IOSDriver.findElement(IOSDriver.java:1) 在 io.appium.java_client.pagefactory.AppiumElementLocator.lambda$0(AppiumElementLocator.java:120) 在 io.appium.java_client.pagefactory.AppiumElementLocator$WaitingFunction.apply(AppiumElementLocator.java:172) 在 io.appium.java_client.pagefactory.AppiumElementLocator$WaitingFunction.apply(AppiumElementLocator.java:1) 在 org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:249) ... 67 更多
【问题讨论】:
-
元素在屏幕上?在 appium 中,如果元素不是屏幕,它将返回 false
-
那是警报 Ok 弹出窗口。不显示
-
基本上你希望它应该返回 true 或 false 但它不应该失败?
标签: selenium appium nosuchelementexception