我们如何让 Selenium WebDriver 等待几秒钟?

How do we make the Selenium WebDriver wait for a few seconds?

我知道这个问题之前已经回答过,但是 none 的解决方案似乎适用于 me.I 整个 day.I 已经尝试了以下所有方法:

1)wait(1000);

2)driver.manage().timeouts().implicitlyWait(1000, TimeUnit.SECONDS);

3)driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);

此外,当我在调试模式下执行我的代码时(更准确地说,调试为 JUnit 测试),我应该看到等待对吗?

我正在尝试使用 Chromedriver 32 位和 IEDriver 32 bit.I 我正在使用 Eclipse IDE。

我试图让驱动程序等待的主要原因是在页面完全加载之前捕获快照。

任何帮助都将是巨大的 appreciated.Thanks!

编辑 :

事实证明问题不在于驱动程序不是 waiting.I 得到一个错误:"Element is not clickable at point (457, 261). Other element would receive the click" 我试着查找它 Debugging "Element is not clickable at point" error 但在 java.

代码:

driver.findElement(By.id("appInfoRestartBtn")).click();             capturescreenshot("C:\webreceiver\Screenshots\Desktops\Desktops3.jpg");        
//driver.findElement(By.cssSelector("div.messageBoxCancelAction > a.dialog.button")).sendKeys("");      
element = driver.findElement(By.cssSelector("div.messageBoxCancelAction > a.dialog.button"));

Actions action = new Actions(driver);
action.moveToElement(element).click().perform();
driver.findElement(By.cssSelector("div.messageBoxCancelAction > a.dialog.button")).click();   
driver.findElement(By.id("appInfoAddButton")).click();              capturescreenshot("C:\webreceiver\Screenshots\Desktops\Desktops4.jpg");

堆栈跟踪:

org.openqa.selenium.WebDriverException: unknown error: Element is not clickable at point (457, 261). Other element would receive the click: <a href="#" class="messagebox overlay" id="genericMessageBoxOverlay" style="display: inline;"></a>

(会话信息:chrome=43.0.2357.81) (驱动程序信息:chrome驱动程序=2.9.248315,平台=Windows NT 6.3 x86_64)(警告:服务器未提供任何堆栈跟踪信息)

如果您使用 Java 作为语言,您可以使用 Thread.sleep(4000L);

对于 C#:

public static void Wait(int TimeMS)
  {
      Thread.Sleep(TimeMS);
  }

使用显式等待以确保元素可点击

/**
 * Ensures that element is clickable
 * 
 * @param element Element that must be clickable
 */
public void untilElementIsClickable(WebElement element) {
    WebDriverWait wait = new WebDriverWait(driver, timeout);
    wait.until(ExpectedConditions.visibilityOf(element));
    wait.until(ExpectedConditions.elementToBeClickable(element));
}

其中超时是代码应等待的秒数。

您可以等到可以使用 FluentWaitExpectedConditions

单击该元素
Wait<WebDriver> wait = new FluentWait<WebDriver>(yourWebdriverInstance)  
                          .withTimeout(30, TimeUnit.SECONDS)
                          .ignoring(StaleElementReferenceException.class) //Exceptiosn to ignore while pulling
                          .ignoring(NoSuchElementException.class)
                          .pollingEvery(100, TimeUnit.MILLISECONDS) 
                          .withMessage("This is an error message");
T result = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("div.messageBoxCancelAction > a.dialog.button"))); 

这将尝试元素是否每 100 毫秒可点击 30 seconds.While 这样做会忽略 NoSuchElementStaleElement 异常