watin - WATIN 中是否有在每次页面加载时执行的页面检查器?

标签 watin watir

我正在使用 WATIR 和 WATIN 编写自动化脚本。 Watir 有一个叫做页面检查器的东西,它是在每次页面加载时运行的代码片段。 WATIN 中有类似的东西吗?我想要一段代码在每次页面加载时运行。通常这用于检查页面错误或页面加载图像。

最佳答案

要判断页面何时加载并不是那么容易。我很快用谷歌搜索了 Watir 中的页面检查器,你提到并找到了 an article about page checkers in Watir .请参阅文章下方的第一条评论。据我所知,它在 WatiN 中非常相似。

不幸的是,我在 WatiN 中没有看到任何类似的功能(内部调用 WaitForComplete 后没有触发任何事件。您可以做的最简单的事情是子类化,例如 IE 类:

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 class 还是很有用的,而且代码清晰,所以我真的推荐使用它。很遗憾在开始使用 WatiN 时没有发现它。

关于watin - WATIN 中是否有在每次页面加载时执行的页面检查器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5409390/

相关文章:

WatiN、IE 实例并通过它们的 hWnd 值抓取它们

使用 SignalR 时 Watin 超时

ruby - 有没有办法在没有 JRuby 的情况下从 Ruby 连接到 H2 数据库?

c# - Watin C# - Firefox 实例

asp.net-mvc - ASP.NET MVC、BDD、Specflow 和 WatiN : putting the application in a specific state

internet-explorer-9 - 使用 watir-webdriver,如何单击表格行?

ruby - 当尝试使用 Watir 附加 HTTPWatch 以在 IE9 中工作时,WIN32OLE.attach 是一个未定义的方法

ruby - FireWatir 文本字段集 : Very Slow

ruby - 我如何在 Watir 中模拟私密浏览体验? ( Selenium )