Не очень легко определить, когда страница загружается. Я быстро погуглил о тех контролерах страниц в Watir, о которых ты упомянул, и нашел статью о контролерах страниц в Watir . Смотрите первый комментарий ниже статьи. AFAIK это действительно похоже на 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
. Теперь, если проверка не удалась, Exception
будет сгенерировано после вызова ie.Page<T>()
(где T является подклассом WatinBaseClass).
По моему мнению, даже если вам не нужно использовать "средства проверки страниц", использование класса Page
все еще действительно полезно и разъясняет код, поэтому я действительно рекомендую его использовать. Сожалею, что не обнаружил его, когда начинал работать с WatiN.