Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Selenium:在我等待的线路上抛出了NoSuchElementException_Java_Firefox_Selenium Webdriver - Fatal编程技术网

Java Selenium:在我等待的线路上抛出了NoSuchElementException

Java Selenium:在我等待的线路上抛出了NoSuchElementException,java,firefox,selenium-webdriver,Java,Firefox,Selenium Webdriver,这是一个常见问题的一个奇怪的变种 我正在运行一个使用无头firefox浏览器的Selenium项目 我有一些常见的非接触性异常。这不是什么新鲜事。但是,试图通过显式等待解决这些问题并不能解决问题 例如,以下行抛出NoSuchElementException: WebElement trackingInbox = methodDriver.findElement(By.id("inbox-widget-container-id")); 然后,我在该行上方添加以下内容: FluentWait wa

这是一个常见问题的一个奇怪的变种

我正在运行一个使用无头firefox浏览器的Selenium项目

我有一些常见的非接触性异常。这不是什么新鲜事。但是,试图通过显式等待解决这些问题并不能解决问题

例如,以下行抛出NoSuchElementException:

WebElement trackingInbox = methodDriver.findElement(By.id("inbox-widget-container-id"));
然后,我在该行上方添加以下内容:

FluentWait wait = new FluentWait(methodDriver);
wait.withTimeout(90, TimeUnit.SECONDS);
wait.pollingEvery(250, TimeUnit.MILLISECONDS);
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("inbox-widget-container-id")));

WebElement trackingInbox = methodDriver.findElement(By.id("inbox-widget-container-id"));
在第一个实例中,我在“methodDriver.findElement…”处得到异常

在第二种情况下,我在“等待,直到…”得到它

当我等待“presenceOf…”和等待“visibilityOf…”时会出现这种情况,元素必须在等待之前可用,这似乎违背了目的

按照当前的显示方式,我别无选择,只能添加隐式等待,但我知道必须有某种方法来执行显式等待,以便在等待之前元素不必可用


我想知道是否有任何关于我做错了什么的想法,以及是否有任何原则可以用来确定特定的等待是否有用。

您实际上忘记了在最后调用
忽略
函数,这就是您想要的忽略。当您等待元素的可见性时,可能会发生元素不存在的情况,但如果您使用忽略函数,则在满足给定条件之前,如果发生此类错误,它将忽略

   Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
       .withTimeout(30, SECONDS)
       .pollingEvery(5, SECONDS)
       .ignoring(NoSuchElementException.class);
Wait Wait=new FluentWait(驱动程序)
.带超时(30秒)
.每(5秒)轮询一次
.忽略(NoSuchElementException.class);

在不运行headless时是否有效?否。至少在我上面列出的特定行中不起作用(我在多个地方发现了这个问题)。运行带头的firefox仍然会导致在运行“wait.until…”时抛出NoSuchElementException,而使用显式等待(WebDriverWait)也不起作用?啊,这看起来确实起作用了。我试了试,既不小心又不小心。但是如果FluentWait不起作用,那怎么办呢?这些等待是什么导致人们在等待之前需要元素-explicit-n-fluent-wait/有很好的解释。谢谢,拉杰。当我有机会的时候,我会检查这个解决方案并报告。正如smit9234建议的那样,从FluentWait切换到WebDriverWait最终完成了这项工作,但我很快就会完成记录。我猜WebDriverWait可能会隐式忽略NoSuchElementException?@somexp12是的,它会隐式消除,
忽略
的主要原因就是因为这个原因,当你检查对象的可见性时,它将首先调用find_元素以首先获取元素,因为元素在检查该元素的可见性之前必须存在,但如果元素不存在,则会导致错误,因此为了避免这种情况,在Fluent wait中使用了
ignoreing
函数。顺便说一句,如果我的代码有效,别忘了接受我的答案!啊,看起来两种选择都有效。因此,有两种解决方案。1.记住忽略您试图解决的异常和2。去网络硬盘吧。还必须认识到,在假定某个元素存在时,可能有人会等待该元素的可见性,在这种情况下,不存在的元素(NoSuchElementException)将代表真正的异常。所以,如果不是这样,我必须指出。嗯,对不起。不知道“接受”答案意味着什么。可能被解释为涉及投票。从一开始就应该得到补救。