[英]Set WebDriver in a pageObject class and then call it in your testcase
我可以在 pageObject 类中为 WebDriver 编写一个方法,然后在我的测试用例类中调用该方法吗?
public class setupMethods {
static WebDriver driver;
public static void setup(String browser) throws Exception{
//Check if parameter passed from TestNG is 'firefox'
if(browser.equalsIgnoreCase("firefox")){
//create firefox instance
System.setProperty("webdriver.gecko.driver", "U:\\path\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
}
//Check if parameter passed as 'chrome'
else if(browser.equalsIgnoreCase("chrome")){
System.setProperty("webdriver.chrome.driver", "U:\\selenium\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
}
//Check if parameter passed as 'Edge'
else if(browser.equalsIgnoreCase("IE")){
System.setProperty("webdriver.ie.driver","U:\\path\\IEDriverServer.exe");
InternetExplorerDriver driver;
driver = new InternetExplorerDriver();
}
else{
//If no browser passed throw exception
throw new Exception("Browser is not correct");
}
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
}
这是我想在我的测试用例类中调用的方法,但是当我运行测试时它会启动 Chrome(或任何其他浏览器),但是当涉及到代码行时返回java.lang.NullPointerException
驱动程序需要最大化窗口driver.manage().window().maximize();
您的方法中有局部变量driver
,这就是您收到此异常的原因。 删除方法主体中driver
的类型声明。
这是您问题的答案:
直接回答,是的, you can write a method for WebDriver in a pageObject class, and then call the method in your testcase class
您需要考虑代码中的某些更改,如下所示:
由于您需要call the method in my testcase
因此您需要取回WebDriver
实例作为返回值。 因此,将方法从public static void setup(String browser)
更改为public static WebDriver setup(String browser)
因为您已经在static WebDriver driver;
中声明了WebDriver
的实例; ,因此您不再需要在初始化driver
时再次提及类名WebDriver
,如WebDriver driver = new FirefoxDriver();
从功能上讲,这会导致您的代码出现NullPointerException
。
没有最佳实践,但我更愿意仅在if
循环中检查传递的参数String browser
。
完成此类中的所有操作后,返回WebDriver
实例。
您自己的代码经过一些简单的调整后将如下所示:
public class setupMethods { static WebDriver driver; public static void setup(String browser) throws Exception { //Check if parameter passed from TestNG is 'firefox' if(browser.equalsIgnoreCase("firefox")) { //create firefox instance System.setProperty("webdriver.gecko.driver", "U:\\path\\geckodriver.exe"); driver = new FirefoxDriver(); } //Check if parameter passed as 'chrome' if(browser.equalsIgnoreCase("chrome")) { System.setProperty("webdriver.chrome.driver", "U:\\selenium\\chromedriver.exe"); driver = new ChromeDriver(); } //Check if parameter passed as 'Edge' if(browser.equalsIgnoreCase("IE")) { System.setProperty("webdriver.ie.driver","U:\\path\\IEDriverServer.exe"); InternetExplorerDriver driver; driver = new InternetExplorerDriver(); } else { //If no browser passed throw exception throw new Exception("Browser is not correct"); } driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); return driver; } }
让我知道这是否回答了您的问题。
我已经解决了我遇到的问题......在使用@debanjanB建议的代码并通过使用在页面对象类中使用构造函数作为驱动程序之后
public name_of_pageobject_class(WebDriver driver){
this.driver = setupMethods.driver;
}
并在测试用例类中调用驱动程序为:
WebDriver driver = setupMethods.setup("chrome");
如果有任何错误,请纠正我......但现在可以了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.