Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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中创建等待web元素完成刷新的等待_Java_Selenium_Selenium Webdriver_Expected Condition - Fatal编程技术网

Java 如何在selenium中创建等待web元素完成刷新的等待

Java 如何在selenium中创建等待web元素完成刷新的等待,java,selenium,selenium-webdriver,expected-condition,Java,Selenium,Selenium Webdriver,Expected Condition,我对Selenium相当陌生,我正在为使用它的web应用程序编写一个测试。在此过程中,我使用断言来确保web应用程序正常工作。对于其中的一些断言,我在一个web元素上进行断言,该元素具有一个已知预期数字的数值。问题是,当更改此数值时,将根据internet连接的速度逐渐进行更改。到目前为止,在我使用断言之前,我已经求助于使用sleep来等待元素完成刷新,但我希望这样做,这样等待的时间不会超过元素停止刷新所需的时间,因此不必包括太短或太长的sleep。避免使用sleep并用隐式等待或使用预期条件(

我对Selenium相当陌生,我正在为使用它的web应用程序编写一个测试。在此过程中,我使用断言来确保web应用程序正常工作。对于其中的一些断言,我在一个web元素上进行断言,该元素具有一个已知预期数字的数值。问题是,当更改此数值时,将根据internet连接的速度逐渐进行更改。到目前为止,在我使用断言之前,我已经求助于使用sleep来等待元素完成刷新,但我希望这样做,这样等待的时间不会超过元素停止刷新所需的时间,因此不必包括太短或太长的sleep。

避免使用sleep并用隐式等待或使用预期条件(如果适用)。下面是它的c代码

int time =10; // set maximum time required for operation
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(time));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath(""))); //replace "" with your desired xpath
上述代码将等待最长10秒,使元素可见。但如果它出现得更早,那么它将跳转到下一个进程,所以您不必等待特定的时间。此外,还有其他可用的预期条件,如ElementExists、ElementToBeClickable等。我将留给您自己探索合适的选项

如果您想使用隐式等待,请使用下面的代码

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(50));
你应该试试这个:

WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(<specific locator of element>));
WebDriverWait wait=new-WebDriverWait(webDriver,timeoutingseconds);
wait.until(ExpectedConditions.visibilityOfElementLocated());
睡眠不是一个好的选择,因为你等待的时间总是预期的


在上面介绍的方法中,您总是等待特定元素的可见性。当元素可见时,测试步骤将继续进行。隐式睡眠没有额外的等待时间

Selenium的操作将等待pageload事件。如果此元素是在没有pageload的情况下动态创建的,则需要使用WebDriverWait和ExpectedCondition。然后,它将轮询DOM,直到满足预期条件或达到超时时间。(或者抛出了一个“stale element”异常…@orde Selenium 2.0现在真的很旧了。。。在这个问题上有很多糟糕的答案。Selenium现在在许多/大多数情况下自动等待页面加载。欢迎使用堆栈溢出!请参阅:SO的期望是,用户提问时不仅要进行研究以回答自己的问题,还要分享研究、代码尝试和结果。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!另见:@JeffC:crud。我没有仔细看答案。我的错。我已经移除了dupe标志,所以它不会指向那个答案。但这个问题仍然是“我该如何等待?”(这似乎是每天都要问的问题,通过基本的谷歌搜索或RTM很容易找到。)@orde同意。。。我们真的需要一个很好的规范更新的答案来回答这个问题,以及每天被问到的其他20个问题。考虑到OP对页面的描述,这可能不起作用。问题在于所描述的流程中有几个步骤:1。元素存在并有一个数字2。用户执行的操作会导致页面刷新并更新该数字3。现在,页面将加载,编号也将更新。如果脚本速度足够快(且页面速度足够慢),它将在步骤1捕获值,而不是等待步骤3发生然后进行检查。您已将其称为隐式等待,但未使用隐式等待。您发布的代码是显式等待。此代码可能不起作用。请看我对mslowiak回答的评论。是的,我搞错了。谢谢你提醒我。现在使用隐式等待示例进行编辑