如何在 selenium 页面对象中使用驱动程序实例?

How to use driver instance in selenium Page Objects?

在 Selenium PageObjects 中,我没有实例化任何 Web 驱动程序实例并编码如下

@FindBy(id = "userID")
WebElementFacade txtusername;

我正在尝试将以下代码实现到 Selenium 页面对象函数中。

Actions action = new Actions(driver);
WebElement mainMenu = driver.findElement(By.linkText("MainMenu"));
action.moveToElement(mainMenu).moveToElement(driver.findElement(By.xpath("submenuxpath"))).click().build().perform();

任何人都可以建议我在页面对象模型中工作时如何在上面的代码中使用 webdriver 实例?

您可以将 driver 实例保留在所有页面对象继承自的父 class 中。

public abstract class AbstractPage {
    protected WebDriver driver;

    protected AbstractPage(WebDriver driver)
    {
        this.driver = driver;
    }
}

public class ExamplePage extends AbstractPage {
    @FindBy(id = "userID")
    WebElementFacade txtusername;

    public ExamplePage(WebDriver driver) {
        super(driver);
    }

    public void someMethod() {
        Actions action = new Actions(driver);
        WebElement mainMenu = driver.findElement(By.linkText("MainMenu"));
        action.moveToElement(mainMenu).moveToElement(driver.findElement(By.xpath("submenuxpath"))).click().build().perform();
    }
}

有两种方法。

第一种方法:您可以在 class 创建并使用您的 webdriver 实例的地方创建 getter。

第二种方式:您可以继承一个class,您可以在其中创建一个webdriver实例,然后再次使用该驱动程序。

至于我,我创建了一个基础 class,我的 webdriver 在这里被初始化,最有用的方法也被放置在那里(比如等待元素、导航到页面等)。并且继承这个 class 可以让我所有的页面对象拥有一堆非常有用的特性。如果需要,我的每个 PageObjects 都使用基础 class 的 webdriver 实例。