webdriver - 实用程序/辅助方法 - 等到类名包含特定样式属性

时间:2014-10-13 14:36:52

标签: c# selenium selenium-webdriver webdriver

我有一个webapp,它将包含一个“Loading”类,当它在页面上完全加载时,将包含100%的width属性,否则它将不包含任何内容。我正在尝试检查此样式属性,但我一直在暂停。这就是我正在做的事情:

我正在调用helper / utility类中的代码,如下所示,因为这是我将在多个类中经常使用的内容:

Utility.WaitForStyle("Loading", Utility.driver);

在我的帮助器/实用程序类中,我有以下代码:

public static void WaitForStyle(string Class, IWebDriver driver)
        {
            WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
            wait.Until<bool>((d) =>
            {
                try
                {
                    IWebElement element = d.FindElement(By.ClassName(Class));
                    String elementresults = element.GetAttribute("style");
                    System.Diagnostics.Debug.WriteLine(elementresults);


                    return false;
                }
                catch (NoSuchElementException)
                {
                    return true;
                }
            });
        }

注意,上面的代码目前只是想检查它是否可以获取类的样式属性,但它没有达到这一点。我知道问题在于实用方法,因为我可以在各个类中使用以下代码:

IWebElement element = Utility.driver.FindElement(By.ClassName("Loading"));
String elementresults = element.GetAttribute("style");
System.Diagnostics.Debug.WriteLine(elementresults);

这将按预期打印输出“width:100%”所以我知道这段代码实际上正常工作。

有人知道我的实用程序方法是否在做些蠢事吗?

2 个答案:

答案 0 :(得分:2)

这是我的代码,等待元素属性具有特定值。它假定传递给它的元素已被验证存在:

public bool WaitForAttribute(IWebDriver driver, IWebElement element, string attributeName, string attributeValue, int timeOut = 5)
{
    // Build a function with a signature compatible with the WebDriverWait.Until method
    Func<IWebDriver, bool> testCondition = (x) => element.GetAttribute(attributeName).Equals(attributeValue);

    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeOut));

    // Wait until either the test condition is true or timeout
    try { wait.Until(testCondition); }
    catch (WebDriverTimeoutException e) { }

    // Return a value to indicate if our wait was successful
    return testCondition.Invoke(null);
}

答案 1 :(得分:1)

这对我有用,因为超过4个月。

 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;
                });
        }