Я пишу сценарии автоматизации, используя WATIR и WATIN. У Watir есть так называемые средства проверки страниц, представляющие собой фрагменты кода, которые запускаются при каждой загрузке страницы. Есть ли что-то подобное в WATIN? Я хочу, чтобы фрагмент кода запускался при каждой загрузке страницы. Обычно это используется для проверки ошибок страницы или загрузки изображений страницы.
Существуют ли в WATIN средства проверки страниц, которые выполняются при каждой загрузке страницы?
Ответы (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.
Page
очень полезен для этих типов утверждений. Это также полезно для доступа к элементам страницы через объекты. Подробнее см. ниже: watinandmore.blogspot.com/2009/06. /introduction-page-class.html
- person Jesse Webb; 08.11.2011