当单击我的按钮时,ng-hide指令将使隐藏的div在页面上可见。我正在使用Seleno为一个角度应用程序编写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 Page对象上返回一个Web元素。
protected IWebElement SelectById(string id)
{
return Find.Element(By.Id(id));
}正如在“回答”部分中提到的,我可能没有以正确的方式等待类按角度更新。我所做的就是让Thread Sleep呆一会儿。
public static void Pause(int durationInMilisecond = 2000)
{
if (SelenoSettings.EnablePausing)
Thread.Sleep(durationInMilisecond);
}有人能给我点建议吗?谢谢。
发布于 2014-08-05 15:46:26
这是我们的解决方案,感谢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;
}
}发布于 2014-08-05 14:49:40
根据角ngHide文档(https://docs.angularjs.org/api/ng/directive/ngHide),“通过在元素中删除或添加ng-hide CSS类来显示或隐藏元素”。所以你最好的方法是:
我相信你的问题是,课程取消不是立即发生的,而是在一段时间之后。对于Java上的Selenium,我已经有过几个问题,我认为这也是您的例子中的问题。
https://stackoverflow.com/questions/25141387
复制相似问题