单击我的按钮时,ng-hide
指令将隐藏div显示在页面上。我正在使用Seleno
为Angular应用程序编写UI测试。
我已检查该元素的display
css值:
var cssValue = SelectById(elementId).GetCssValue("display");
此cssValue
始终返回none
。
还检查了class
属性。
var cls = SelectById(elementId).GetAttribute("class");
我希望ng-hide
应该从这个元素的类中删除。
return !SelectById(elementId).GetAttribute("class").Contains("ng-hide");
但每次class
仍然包含ng-hide
!
如果有人可能会问,这是我的SelectById
。只是在Selenium页面对象上返回一个Web元素。
protected IWebElement SelectById(string id)
{
return Find.Element(By.Id(id));
}
正如答案部分所述,我可能没有以正确的方式等待Angular的类更新。我所做的只是暂时让Thread
Sleep
。
public static void Pause(int durationInMilisecond = 2000)
{
if (SelenoSettings.EnablePausing)
Thread.Sleep(durationInMilisecond);
}
任何人都可以给我一些建议吗?感谢。
答案 0 :(得分:1)
这是我们的解决方案,感谢ABucin和Arran的意见。感谢您为我们指出正确的方向。 WebDriverWait
是我们在这种情况下应该考虑的事情。
public bool Displayed(string elementId)
{
try
{
var wait=new WebDriverWait(BrowserFactory.Chrome(),new TimeSpan(0,2,0));
wait.Until(d => !SelectById(elementId).GetAttribute("class").Contains("ng-hide"));
// then there is all types of checking start to work:
var bySelenoDisplayed =SelectById(elementId).Displayed;
return bySelenoDisplayed;
var byCss = SelectById(elementId).GetCssValue("display");
return !byCss.Equals("hidden");
var byClass = SelectById(elementId).GetAttribute("class");
return !byClass.Contains("ng-hide");
}
catch (Exception)
{
// 2min timeout reached.
return false;
}
}
答案 1 :(得分:0)
根据Angular ngHide 文档(https://docs.angularjs.org/api/ng/directive/ngHide),“通过删除或添加ng-hide CSS类来显示或隐藏元素。”< / em>的。因此,接近这一点的最佳方式是:
我相信你的问题是,班级移除不会立即发生,而是在一段时间后。关于Java的Selenium我有几个问题,我认为这也是你的问题。