Selenium 2中的页面对象模型与C#。无法将基类对象转换为子类。

时间:2012-01-17 18:52:47

标签: c# selenium webdriver selenium-webdriver

我正在尝试使用页面对象模式使用selenium2创建测试。所以,我有几个课程:

public class WebPage
{
protected IWebDriver webDriver;

public DataPage( IWebDriver d)  
{
this.webDriver = d; 
PageFactory.InitElements(webDriver, this);
}
}


public class WebForm : WebPage
{
public WebForm(IWebDriver d) : base(d) { }
public DataPage SubmitForm()
{
//Some code here
return new DataPage(webDriver);
}
}

public class ResultPage : WebPage
{
public ResultForm(IWebDriver d) : base(d) { }
}

WebPage类是任何网页的通用类。 所以,我的问题是,我可能会因为SubmitForm()方法而得到任何类的对象。这取决于测试。如果我想测试不成功的提交,我将保持在同一个表单上,并且我希望将WebForm对象作为SubmitForm()方法的结果。如果提交成功,那么我可能会被重定向到结果页面,所以我需要返回ResultPage对象。但是当我使用:

WebForm DP = NewForm.SubmitForm() as WebForm;

我收到错误: System.NullReferenceException:未将对象引用设置为对象的实例。

我不熟悉C#和面向对象的编程,以及Selenium。所以,也许我的所有结构都是错误的。

任何帮助和建议都将不胜感激。

由于

1 个答案:

答案 0 :(得分:1)

DataPage不是WebForm,因此as运算符将返回null。使用强制转换通常比使用as更好,除非它对于真正不适合投射的值有效(不是错误)。

目前尚不清楚你要做什么,说实话 - 但听起来你的结构已经过时了。如果您一般不熟悉C#和OOP,我会强烈建议您暂时关闭Selenium,并集中精力学习C#的基础知识。回到Selenium时,唯一的“新”和具有挑战性的事情将是Selenium本身。否则就像是决定用独轮车在日语中演奏哈姆雷特,而不熟悉莎士比亚,日本人或单轮手枪...