我正在使用WATIR和WATIN编写自动化脚本。 Watir有一个叫做页面检查器的东西,它是在每个页面加载时运行的代码片段。在WATIN有类似的东西吗?我想在每个页面加载时运行一段代码。通常,这用于检查页面错误或页面加载图像。
答案 0 :(得分:4)
当页面加载时,判断并不是那么容易。我快速搜索了Watir中的那个页面检查器,你提到并发现了an article about page checkers in Watir。请参阅文章的第一条评论。 AFAIK在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");
}
}
但是,情况与上述评论中描述的情况类似(比仅仅页面加载更频繁地运行)。
我认为更好的方法是使用WatiN库中的Page
类。这是有据可查的。 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
(其中T是WatinBaseClass的子类)之后将抛出ie.Page<T>()
。
在我看来,即使你不需要使用“页面检查程序”,使用Page
类仍然非常有用并澄清代码,所以我真的建议使用它。我很遗憾在我开始与WatiN合作时没有发现它。