isDisplayed方法遇到错误?

问题描述 投票:0回答:1

如果(driver.findElement(By.id(id))。isDisplayed()){

}

元素不可用时总是执行失败吗?

环境:

Appium 1.15.1

java客户端7.3.0

Selenium-java 3.141.59

错误日志:

Android Loding问题页面

org.openqa.selenium.NoSuchElementException:无法通过此策略定位元素: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()在并在And确认On On Menu列表正在导航到与OnBoared User对应的屏幕(:12)由以下原因引起:org.openqa.selenium.TimeoutException:预期的条件失败:等待io.appium.java_client.pagefactory.AppiumElementLocator$WaitingFunction@66ba7e45(以500毫秒为间隔尝试1秒)在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(本机方法)处在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)在java.lang.reflect.Method.invoke(Method.java:498)在cumul.runtime.Utils $ 1.call(Utils.java:40)在cumul.runtime.Timeout.timeout(Timeout.java:16)在cumul.runtime.Utils.invoke(Utils.java:34)在黄瓜。运行时.java.JavaStepDefinition.execute(JavaStepDefinition.java:38)在黄瓜。运行时.StepDefinitionMatch.runStep(StepDefinitionMatch.java:37)在Cucumber.runtime.Runtime.runStep(Runtime.java:300)在cumul.runtime.model.StepContainer.runStep(StepContainer.java:44)在Cucumber.runtime.model.StepContainer.runSteps(StepContainer.java:39)在cumul.runtime.model.CucumberScenario.run(CucumberScenario.java:44)在cumul.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',操作系统名称:'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更多

selenium appium nosuchelementexception
1个回答
0
投票

如果您要验证页面上是否显示了元素,则可以尝试以下操作:

List<WebElement> ele = driver.findElements(By.id(id));

这将返回与您提供的ID匹配的元素列表。如果列表大小大于0,则表示该元素存在于页面上。

© www.soinside.com 2019 - 2024. All rights reserved.