在页面对象模型中,我是否必须一直创建 webdriver?

In Page Object Model do i have to create webdriver all the time?

我正在使用我刚开始使用的页面对象模型,我创建了 2 个包,一个是 com.automation.pages,另一个是 com.automation.testcases。 在这两个包中,我为登录页面创建了一个 class 它工作正常我正在分享下面的代码。

package com.automation.pages;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

public class LoginPage {
    
    WebDriver driver;

    
    public LoginPage(WebDriver ldriver)
    {
        this.driver=ldriver;
    }
    
    @FindBy (xpath="//input[@name='email'] ") WebElement email;
    @FindBy (xpath="//input[@name='password']") WebElement password;
    @FindBy (xpath="//body/div[2]/div[2]/div[2]/form[1]/div[3]/div[2]/button[1]") WebElement loginbutton;
    
    
    
    public void logintoLabaiik(String email1, String password1 )
    {
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
        email.sendKeys(email1);
        password.sendKeys(password1);
        loginbutton.click();
    }
    
    
}

我在处理新页面时遇到的问题是当我创建一个驱动程序时,当我使用 ldriver 时它会抛出一个错误,当我替换“l”时它仍然会抛出错误。请解决我的问题。

package com.automation.pages;

import org.openqa.selenium.WebDriver;

public class TaxSetup {
    
    WebDriver driver;
    
    public TaxSetup(WebDriver driver)
    {
        this.driver.ldriver;
    }
    
    
}

请更正 TaxSetUp 构造函数中的以下行。

this.driver.ldriver;

这应该是

this.driver = driver;

是的,您必须为您作为应用程序的一部分创建的所有页面 类 传递 WebDriver 实例,否则它们将为驱动程序分配默认值 null.

看起来你在 TaxSetup 构造函数中有问题。

这应该有效。

public TaxSetup(WebDriver driver){
    this.driver=driver;
}

看看如何创建 2 个页面对象 类 并在测试中使用它们:

登录页面

public class LoginPage {
    
    final WebDriver driver;
    
    public LoginPage(WebDriver driver){
        this.driver=driver;
    }
    // page implementation
}

税收设置

public class TaxSetup {
    
    final WebDriver driver;
    
    public TaxSetup(WebDriver driver){
        this.driver=driver;
    }
    // page implementation
}

如何在测试中使用

public class SomeTest {

    WebDriver driver;
    LoginPage loginPage;
    TaxSetup taxSetupPage;

    @BeforeClass
    public void initDriverAndPages() {
        driver = ... // e.g. new ChromeDriver()
        loginPage = PageFactory.initElements(driver, LoginPage.class);
        taxSetupPage = PageFactory.initElements(driver, TaxSetup.class);
    }

    @Test
    public void someTest() {
        // implement test using loginPage, taxSetupPage as you like
    }

    @AfterClass
    public void quitDriver() {
        driver.quit();
    }

}