我们如何让 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));
}
其中超时是代码应等待的秒数。
您可以等到可以使用 FluentWait
和 ExpectedConditions
单击该元素
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 这样做会忽略 NoSuchElement
和 StaleElement
异常
我知道这个问题之前已经回答过,但是 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));
}
其中超时是代码应等待的秒数。
您可以等到可以使用 FluentWait
和 ExpectedConditions
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 这样做会忽略 NoSuchElement
和 StaleElement
异常