我用POM和Page Factory方法实现了一个框架。我有一个带有大量init的baseTest类,例如:(每个其他测试类扩展它)
Registration regPage = PageFactory.initelements(driver,Registration.class);
Login loginPage = PageFactory.initelements(driver,login.class);
Details detailsPage = PageFactory.initelements(driver,details.class);
.. (more than 10)
它工作正常,但我想找到更优雅/结构化的方式来处理它。
我尝试将它构建到构造函数中:
public Registeration(WebDriver driver) {
super(driver);
PageFactory.initelements(driver,Registration.class(or can be this));
}
在这种情况下,我得到了一个巨大的堆内存错误,但它会非常好,因为我可以使用一个断言来验证构造函数中的每个pageObject使用标题或页面上的任何元素,对吗?
如何构建我的inits以及如何使用构造函数使用PageFactory处理它?</ p>
谢谢!
答案 0 :(得分:0)
这是因为initElements陷入了无限循环。 PageFactory的InitElement函数首先使用webdriver参数查找页面的构造函数。就像跑步者的Page Creation调用-> initElements(第二行)-> initElements调用的Page Constructor一样,它一直在盘旋。因此,您不能使用pagefactory在page的构造函数中初始化page类。您可以构建这样的内容
void ucla()
{
std::cout << "inside ucla" << std::endl;
}
void application_main()
{
std::cout << "here" << std::endl;
std::cout << "this file " << std::endl;
ucla();
}
int main()
{
const char* outName = argv[2];
std::string outFile(outName);
// Save the rdbuf of cout.
std::streambuf* coutbuf = std::cout.rdbuf();
termbuf = std::cout.rdbuf();
if (!outFile.empty())
{
std::ofstream outstr;
outstr.open(argv[2]);
std::cout.rdbuf(outstr.rdbuf());
// Needs to be here so that every use of cout will redirect the output
// to the file.
application_main();
}
else
{
// In this branch, use of cout will produce output in the console.
application_main();
}
// Restore the rdbuf of cout.
std::cout.rdbuf(coutbuf);
}