Specflow:检查元素在html页面上是否可见

时间:2012-05-28 14:59:02

标签: .net html watin visible specflow

我使用SpecFlow + WatiN + nunit.framework为.net构建BDD测试

我想检查HTML页面上的以下功能:

Scenario: Change user role from 'Admin' to 'User'

Given I have logged in
And I am on the 'Add new user' page
Then the 'Homepage' should not be visible
When I select 'Role' as 'User'
Then the 'Homepage' should be visible

这是某些属性依赖于用户角色的情况。管理员没有主页,但用户没有。所以页面有一个适当的javascript来显示/隐藏它。

更新:我做了以下方法:

[Then(@"'(.*)' (should|should not) be visible")]
public void ThenElementShouldBeVisible(string elementName, string should)
{
    var element = WebBrowser.Current.Elements.First(Find.ByLabelText(elementName));
    Assert.That(should == "should"
                    ? element.Style.Display == "none"
                    : element.Style.Display != "none");
}

但在我看来,在Javascript完成工作后,浏览器对象不会更新元素样式。

我不确定如何使用SpecFlow检查元素是否可见。

1 个答案:

答案 0 :(得分:1)

您可以注入一些代码来等待任何ajax或异步操作完成,如this讨论中所述。但是,即使有这样的解决方案,我们仍然需要在这里和那里使用一些Thread.Sleep()。

作为旁注,您的示例似乎危险地接近测试脚本。这是一种你应该尽量避免的反模式。您可以找到一些指南here