Существуют ли в WATIN средства проверки страниц, которые выполняются при каждой загрузке страницы?

Я пишу сценарии автоматизации, используя WATIR и WATIN. У Watir есть так называемые средства проверки страниц, представляющие собой фрагменты кода, которые запускаются при каждой загрузке страницы. Есть ли что-то подобное в WATIN? Я хочу, чтобы фрагмент кода запускался при каждой загрузке страницы. Обычно это используется для проверки ошибок страницы или загрузки изображений страницы.


person Mohit    schedule 23.03.2011    source источник


Ответы (1)


На самом деле не так просто сказать, когда страница загружается. Я быстро погуглил об этих средствах проверки страниц в Watir, о которых вы упомянули, и нашел статья о средствах проверки страниц в Watir. Смотрите первый комментарий под статьей. Насколько я знаю, это действительно похоже на WatiN.

К сожалению, я не вижу подобной функциональности в WatiN (никакое событие не запускается после внутреннего вызова WaitForComplete. Самое простое, что вы можете сделать, это создать подкласс, например, IE class:

class MyIE : IE
{
    public MyIE(string url) : base(url) { } //TODO: add constructors

    public override void WaitForComplete(int waitForCompleteTimeOut)
    {
        base.WaitForComplete(waitForCompleteTimeOut);
        Console.WriteLine("Page has been loaded");
    }
}

Однако ситуация будет аналогична описанной в упомянутом комментарии (выполняется гораздо более регулярно, чем просто загрузка страницы).

Я думаю, что лучшим подходом было бы использование класса Page из библиотеки WatiN. Это хорошо задокументировано. Пример для веб-страницы watin.org:

var ie = new MyIE("http://watin.org/");

var homePage = ie.Page<HomePage>();
Console.WriteLine(homePage.FirstFeature);
homePage.DocumentationLink.Click();

var documentationPage = ie.Page<DocumentationPage>();
Console.WriteLine(documentationPage.FAQLink.Url);

Для запуска этого кода вам понадобятся следующие классы:

abstract class WatiNBasePage : Page
{
    [FindBy(Id = "header")]
    public Div HeaderDiv { get; set; }

    public Link HomeLink { get { return HeaderDiv.Link(Find.ByText("Home")); } }

    public Link DocumentationLink { get { return HeaderDiv.Link(Find.ByText("Documentation")); } }

    protected override void InitializeContents()
    {
        base.InitializeContents();
        VerifyDocumentProperties(UnverifiedDocument, errorMessage => { throw new Exception(errorMessage); }); //TODO: modify if needed
    }

    protected override void VerifyDocumentProperties(Document document, Page.ErrorReporter errorReporter)
    {
        base.VerifyDocumentProperties(document, errorReporter);
        if (!HomeLink.Exists)
            errorReporter("HomeLink not exists");
        //TODO: more checks here
    }
}

class HomePage : WatiNBasePage
{
    [FindBy(Id = "features")]
    public Table FeatureTable { get; set; }

    public string FirstFeature { get { return FeatureTable.Span(Find.First()).Text; } }
}

class DocumentationPage : WatiNBasePage
{
    [FindBy(Text = "Frequently Asked Questions")]
    public Link FAQLink { get; set; }
}

В основном вам нужно реализовать VerifyDocumentProperties. Приведенный выше код проверит, существует ли HomeLink, но, возможно, вы захотите проверить, существует ли DocumentationLink и т. д. Второе — изменить вызов на VerifyDocumentProperties. Теперь, если проверка не пройдена, после вызова ie.Page<T>() будет выброшено Exception (где T — подкласс WatinBaseClass).

На мой взгляд, даже если вам не нужно использовать «проверки страниц», использование класса Page все равно действительно полезно и проясняет код, поэтому я очень рекомендую его использовать. Жалею, что не обнаружил его, когда начинал работать с WatiN.

person prostynick    schedule 23.03.2011
comment
Большое спасибо. Я попробую этот подход. Мой конкретный вариант использования заключается в том, что продукт, который я тестирую, показывает загрузку графики, в то время как данные страницы загружаются синхронно или асинхронно (AJAX), и мне приходится ждать, пока он не исчезнет, ​​чтобы все необходимые компоненты страницы были видны. - person Mohit; 24.03.2011
comment
Класс Page очень полезен для этих типов утверждений. Это также полезно для доступа к элементам страницы через объекты. Подробнее см. ниже: watinandmore.blogspot.com/2009/06. /introduction-page-class.html - person Jesse Webb; 08.11.2011