如何等到元素不可见
How to wait until an element is invisible
我需要等待元素不可见
并为此找到了几个解决方案,但其中 none 似乎对我有用。
我认为问题出在我使用的是 PageObject 模型。但我不完全确定。
public static void WaitForElementToBeInvisible(this Browser browser, IWebElement element, int seconds = 30)
{
var wait = new WebDriverWait(browser.Driver, new TimeSpan(0, 0, seconds));
wait.Until(ExpectedConditions.InvisibilityOfElementLocated(element));
}
但是returns错误cannot convert from IWebElement to Selenium.By
提前致谢
简答,这是不可能的。 Selenium 的开发人员已决定对此没有有用的用例。
如果可以使用 By
定位器,您可以使用:
public static void WaitUntilInvisible(this By locator)
{
try
{
if (Driver.FindElement(locator).Displayed)
{
wait.Until(ExpectedConditions.ElementIsVisible(locator));
}
}
另请参阅:
您的代码不正确。它调用 InvisibilityOfElementLocated
不接收 IWebElement 作为参数。请参阅下面的示例。
public static bool WaitForElementToBeInvisible(this IWebElement element, int timeoutSecond = 10)
{
IWait<IWebElement> wait = new DefaultWait<IWebElement>(element);
wait.Timeout = TimeSpan.FromSeconds(timeoutSecond);
wait.PollingInterval = TimeSpan.FromMilliseconds(300);
try
{
wait.Until(!element.Displayed);
}
catch (WebDriverTimeoutException)
{
return false;
}
return true;
}
IWebElement div = driver.FindElement(By.Id("id"));
var result = div.WaitForElementToBeInvisible(5);
感谢大家的回答,不过是这样解决的。
public static void WaitUntilInvisible(this Browser browser, By element, int seconds = 30)
{
var wait = new WebDriverWait(browser.Driver, new TimeSpan(0, 0, seconds));
wait.Until(ExpectedConditions.InvisibilityOfElementLocated(element));
}
然后用作按定位器
By LoadingIcon = By.XPath(".//*[contains(@class, 'loading')]");
很有魅力:)
do { Playback.Wait(100); } while (_driver.FindElements(By.Id("elementId")).Count() > 0);
我需要等待元素不可见 并为此找到了几个解决方案,但其中 none 似乎对我有用。
我认为问题出在我使用的是 PageObject 模型。但我不完全确定。
public static void WaitForElementToBeInvisible(this Browser browser, IWebElement element, int seconds = 30)
{
var wait = new WebDriverWait(browser.Driver, new TimeSpan(0, 0, seconds));
wait.Until(ExpectedConditions.InvisibilityOfElementLocated(element));
}
但是returns错误cannot convert from IWebElement to Selenium.By
提前致谢
简答,这是不可能的。 Selenium 的开发人员已决定对此没有有用的用例。
如果可以使用 By
定位器,您可以使用:
public static void WaitUntilInvisible(this By locator)
{
try
{
if (Driver.FindElement(locator).Displayed)
{
wait.Until(ExpectedConditions.ElementIsVisible(locator));
}
}
另请参阅:
您的代码不正确。它调用 InvisibilityOfElementLocated
不接收 IWebElement 作为参数。请参阅下面的示例。
public static bool WaitForElementToBeInvisible(this IWebElement element, int timeoutSecond = 10)
{
IWait<IWebElement> wait = new DefaultWait<IWebElement>(element);
wait.Timeout = TimeSpan.FromSeconds(timeoutSecond);
wait.PollingInterval = TimeSpan.FromMilliseconds(300);
try
{
wait.Until(!element.Displayed);
}
catch (WebDriverTimeoutException)
{
return false;
}
return true;
}
IWebElement div = driver.FindElement(By.Id("id"));
var result = div.WaitForElementToBeInvisible(5);
感谢大家的回答,不过是这样解决的。
public static void WaitUntilInvisible(this Browser browser, By element, int seconds = 30)
{
var wait = new WebDriverWait(browser.Driver, new TimeSpan(0, 0, seconds));
wait.Until(ExpectedConditions.InvisibilityOfElementLocated(element));
}
然后用作按定位器
By LoadingIcon = By.XPath(".//*[contains(@class, 'loading')]");
很有魅力:)
do { Playback.Wait(100); } while (_driver.FindElements(By.Id("elementId")).Count() > 0);