gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:01:56 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com