WebDriverWait 没有在等待我指定的元素
WebDriverWait is not waiting for the element I specify
我试图让我的代码在尝试从元素中获取文本之前等待元素出现。如果我逐步执行允许元素时间出现的代码,它会按预期工作,但如果我 运行 它没有断点,等待似乎被忽略并引发异常。
我不明白为什么它被忽略了?
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
IWebElement message = wait.Until(driver => driver.FindElement(By.ClassName("block-ui-message")));
string messageText = message.Text;
作为替代方案,您可以为 ElementIsVisible()
引入 WebDriverWait,您可以使用以下 :
string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(30)).Until(ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");
将 DotNetSeleniumExtras.WaitHelpers
与 nuget
一起使用:
不是很清楚我需要的特定使用指令到底是什么意思。如果您正在使用 SeleniumExtras 和 WaitHelpers,您可以使用以下解决方案:
string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");
下面的示例代码将等待元素出现
private bool IsElementPresent(By by)
{
try
{
_driver.FindElement(by);
return true;
}
catch (NoSuchElementException)
{
return false;
}
}
private void WaitForReady(By by)
{
var wait = new WebDriverWait(_driver, TimeSpan.FromHours(2));
wait.Until(driver =>
{
//bool isAjaxFinished = (bool)((IJavaScriptExecutor)driver).ExecuteScript("return jQuery.active == 0");
return IsElementPresent(by);
});
}
// ...
// Usage
WaitForReady(By.ClassName("block-ui-message")); // It will wait until element which class name is 'block-ui-message' is presented to page
我试图让我的代码在尝试从元素中获取文本之前等待元素出现。如果我逐步执行允许元素时间出现的代码,它会按预期工作,但如果我 运行 它没有断点,等待似乎被忽略并引发异常。
我不明白为什么它被忽略了?
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
IWebElement message = wait.Until(driver => driver.FindElement(By.ClassName("block-ui-message")));
string messageText = message.Text;
作为替代方案,您可以为 ElementIsVisible()
引入 WebDriverWait,您可以使用以下
string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(30)).Until(ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");
将 DotNetSeleniumExtras.WaitHelpers
与 nuget
一起使用:
不是很清楚我需要的特定使用指令到底是什么意思。如果您正在使用 SeleniumExtras 和 WaitHelpers,您可以使用以下解决方案:
string messageText = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.ClassName("block-ui-message"))).GetAttribute("innerHTML");
下面的示例代码将等待元素出现
private bool IsElementPresent(By by)
{
try
{
_driver.FindElement(by);
return true;
}
catch (NoSuchElementException)
{
return false;
}
}
private void WaitForReady(By by)
{
var wait = new WebDriverWait(_driver, TimeSpan.FromHours(2));
wait.Until(driver =>
{
//bool isAjaxFinished = (bool)((IJavaScriptExecutor)driver).ExecuteScript("return jQuery.active == 0");
return IsElementPresent(by);
});
}
// ...
// Usage
WaitForReady(By.ClassName("block-ui-message")); // It will wait until element which class name is 'block-ui-message' is presented to page