如何等待css属性更改?

时间:2014-02-11 22:58:53

标签: java selenium selenium-webdriver

如何告诉Selenium webdriver等待特定元素在css中设置特定属性?

我想等待: element.getCssValue("display").equalsIgnoreCase("block")

通常会等待元素存在,如下所示: webdriver.wait().until(ExpectedConditions.presenceOfElementLocated(By.id("some_input")));

如何等待display属性的具体css值?

3 个答案:

答案 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;");