在PageObject类中设置WebDriver,然后在测试用例中调用它

时间:2017-07-13 18:57:33

标签: java eclipse selenium selenium-webdriver webdriver

我可以在pageObject类中为WebDriver编写一个方法,然后在我的testcase类中调用该方法吗?

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();

的代码

3 个答案:

答案 0 :(得分:2)

您的方法中有局部变量driver,这就是您获得此异常的原因。 删除方法体中driver的类型声明。

答案 1 :(得分:0)

以下是您的问题的答案:

直接回答,you can write a method for WebDriver in a pageObject class, and then call the method in your testcase class

您需要考虑代码中的某些更改,如下所示:

  1. 根据需要call the method in my testcase,您需要返回WebDriver个实例作为回复。因此,请将方法从public static void setup(String browser)更改为public static WebDriver setup(String browser)

  2. 由于您已在WebDriver中声明了static WebDriver driver;的实例,因此在初始化{{1}时不再需要再次提及类名WebDriver在} driver

  3. 从功能上讲,这会导致代码中出现WebDriver driver = new FirefoxDriver();

    1. 没有最佳做法,但我更愿意仅在NullPointerException循环中检查传递的参数String browser

    2. 完成此课程中的所有操作后,请返回if个实例。

    3. 您自己的代码有一些简单的调整,如下所示:

      WebDriver

      如果这回答你的问题,请告诉我。

答案 2 :(得分:0)

在使用@debanjanB建议的代码并使用构造函数在页面对象类中使用构造函数

后,我解决了我的问题...
public name_of_pageobject_class(WebDriver driver){ 

    this.driver = setupMethods.driver; 

    }

并在测试用例类中调用驱动程序:

WebDriver driver = setupMethods.setup("chrome");

如果出现任何问题,请纠正我......但现在可以了。