Specflow: проверьте, отображается ли элемент на странице html

Я использую SpecFlow + WatiN + nunit.framework для построения тестов BDD для .net

Я хотел бы проверить следующие функции на 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.


person Anubis    schedule 28.05.2012    source источник
comment
Добавление тега .net, поскольку я считаю, что для этого потребуется какой-то .net язык.   -  person Jared Farrish    schedule 28.05.2012
comment
Ваш шаг "Домашняя страница" не должна быть видна в данном контексте. Может быть тест на проверку не видно. Затем вы должны подтвердить это с помощью C # в своем тесте. Вы также можете написать это как «Домашняя страница не отображается».   -  person Jenninha    schedule 10.07.2014
comment
Должен быть тест, чтобы убедиться, что он не отображается, И вы также можете подтвердить его на одном из указанных шагов, если хотите убедиться, что находитесь на правильной странице.   -  person Jenninha    schedule 10.07.2014


Ответы (1)


Вы можете ввести код для ожидания завершения любых ajax или асинхронных действий, например, как описано в это обсуждение. Однако даже с таким решением нам все равно нужно использовать некоторые Thread.Sleep () здесь и там.

В качестве побочного примечания ваш пример кажется опасно близким к тестовым сценариям. Это антипаттерн, которого следует избегать. Вы можете найти некоторые рекомендации здесь.

person Dennis Doomen    schedule 14.07.2012