如何告诉Selenium webdriver等待特定元素在css中设置特定属性?
我想等待:
element.getCssValue("display").equalsIgnoreCase("block")
通常会等待元素存在,如下所示:
webdriver.wait().until(ExpectedConditions.presenceOfElementLocated(By.id("some_input")));
如何等待display
属性的具体css值?
答案 0 :(得分:11)
我认为这对你有用。
webdriver.wait().until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='some_input'][contains(@style, 'display: block')]")));
答案 1 :(得分:1)
上述答案的小修改对我有帮助。在开始(
之前我不得不使用两个By.XPATH
,而不是1:
WebDriverWait(browser,1000).until(EC.presence_of_element_located((By.XPATH,xpathstring)))
答案 2 :(得分:0)
在C#中使用扩展方法:
public static WebDriverWait wait = new WebDriverWait(SeleniumInfo.Driver, TimeSpan.FromSeconds(20));
public static void WaitUntilAttributeValueEquals(this IWebElement webElement, String attributeName, String attributeValue)
{
wait.Until<IWebElement>((d) =>
{
if (webElement.GetAttribute(attributeName) == attributeValue)
{
return webElement;
}
return null;
});
}
用法:
IWebElement x = SeleniumInfo.Driver.FindElement(By.Xpath("//..."));
x.WaitUntilAttributeValueEquals("disabled", null); //Verifies that the attribute "disabled" does not exist
x.WaitUntilAttributeValueEquals("style", "display: none;");