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