我正在学习如何使用Selenium为Web应用程序创建框架。我现在正在学习如何使用页面导航创建页面对象模型。我目前正在播放的视频展示了如何执行此操作,但视频末尾的代码无效。他试图使用Class的返回类型来初始化该类中的所有对象,但他没有这样做,因为他使用了非参数化的构造函数。那么有没有办法在使用非参数化构造函数时初始化我的页面元素?
视频位于此处:http://youtu.be/IUBwtLG9hbs
在上面的视频中,他只是创建了一个简单的测试,将文本“Selenium”输入到谷歌文本框中。点击搜索。单击Selenium链接。然后单击Selenium网页上的“下载”选项卡。
在视频结束时,他试图通过在点击按钮或链接后初始化元素来显示如何使用页面导航,从而将您发送到新页面。此测试的目标是在从Google页面单击Selenium链接后映射Selenium网页的所有元素。
所以他补充说“返回新的SeleniumPageObjects();”到GoogleHomePageObjects类中的以下方法:
public SeleniumPageObjects ClickSelenium()
{
lnkSelenium.Click();
return new SeleniumPageObjects();
}
然后在Test类的main / test方法中,他添加以下内容以单击Selenium链接,然后返回Selenium页面的所有映射对象:
SeleniumPageObjects selPage = page.ClickSelenium();
然后,他在SeleniumPageObjects类中添加了一个构造函数:
public SeleniumPageObjects()
{
}
它抛出NullReferenceException,因为它从未初始化selenium页面对象(请参阅下面的代码,了解如何在不使用返回类型的情况下完成它)。怎么解决这个问题?他说要观看第7部分,但我看了第7部分并且错误的代码永远不会被解决。
注意:我已经知道如何在main / test方法中显式初始化页面对象。例如,将其添加到main / test方法:
SeleniumPageObjects selPage = new SeleniumPageObjects(driver);
初始化SeleniumPageObjects类中的元素:
public SeleniumPageObjects(IWebDriver driver)
{
PageFactory.InitElements(driver, this);
}
我只想知道在使用返回类型时如何执行此操作,因为这样可以完成他正在讨论的页面关系。
答案 0 :(得分:1)
有两种方法可以解决此问题。
方法1 为类中的Driver实例创建静态属性,并在所有页面中使用static属性
E.g。
public SeleniumPageObjects(IWebDriver driver)
{
PageFactory.InitElements(driver, this);
}
可以更改为
public SeleniumPageObjects()
{
PageFactory.InitElements(StaticClass.Driver, this);
}
所以StaticClass看起来像这样
public class StaticClass
{
public static IWebDriver Driver {get;set;}
}
方法2 为页面创建一个BaseClass并在其中创建WebDriver属性,这样在继承页面的Baseclass时,您将获得Driver的引用
E.g 基类
public class BaseClass
{
public static IWebDriver Driver {get;set;}
}
因此,Selenium页面对象类将如下所示
public class SeleniumPageObject : BaseClass
{
public SeleniumPageObjects()
{
PageFactory.InitElements(Driver, this);
}
}
希望这能回答你的问题!!!
谢谢, Karthik KK http://www.executeautomation.com