我有一个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%”所以我知道这段代码实际上正常工作。
有人知道我的实用程序方法是否在做些蠢事吗?
答案 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;
});
}