Java Selenium页面对象模式定位器参数

Java Selenium页面对象模式定位器参数,java,selenium,selenium-webdriver,automation,pageobjects,Java,Selenium,Selenium Webdriver,Automation,Pageobjects,最近开始使用Selenium页面对象模式。我理解Selenium页面对象模式和PageFactroy的概念。但让我困惑的是它缺乏灵活性。例如,页面对象模式如何提供对简单定位器参数的支持?如何使用Selenium页面对象模式处理动态定位器 为了更好地理解这个问题,请采用以下场景 我有我的登录页面 public class LoginPage { private final WebDriver driver; public LoginPage(WebDriver driver) {

最近开始使用Selenium页面对象模式。我理解Selenium页面对象模式和PageFactroy的概念。但让我困惑的是它缺乏灵活性。例如,页面对象模式如何提供对简单定位器参数的支持?如何使用Selenium页面对象模式处理动态定位器

为了更好地理解这个问题,请采用以下场景

我有我的登录页面

public class LoginPage {
  private final WebDriver driver;

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

   By usernameLocator = By.id("username");
   By passwordLocator = By.id("passwd");
   By loginButtonLocator = By.id("login");

   public HomePage loginAs(String username, String password) {
      driver.findElement(usernameLocator).sendKeys(username);
      driver.findElement(passwordLocator).sendKeys(password);
      driver.findElement(loginButtonLocator).submit();
      return new HomePage(driver);
   }

}
我有我的主页

public class HomePage {

    private final WebDriver driver;

    By usernameLocator = By.xpath("//span[contains(text(),'Welcome <LoggedInUserName>')]");

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

    public HomePage checkLoggedInUser(String username) {
        // I want to parameterize the usernameLocator with the logged in username
        driver.findElement(usernameLocator);
        return this;
    }

}
公共类主页{
私有最终WebDriver;
By usernameLocator=By.xpath(“//span[contains(text(),'Welcome')]”);
公共主页(WebDriver){
this.driver=driver;
}
公共主页checkLoggedInUser(字符串用户名){
//我想用登录的用户名参数化usernameLocator
driver.findElement(usernameLocator);
归还这个;
}
}
在主页中,我想检查span标记,其中包含文本“Welcome User1”。可以根据登录的用户更改用户名。我想用登录的用户名参数化主页中的用户名定位器


我如何在运行时参数化By定位器并传递参数值

您可以使用方法pass message作为参数来执行此操作,该参数通过对象返回,如下所示:

public By usernameLocator(String message) {
    return By.xpath(String.format("//span[contains(text(),'%s')]", message));
}
在页面文件中需要的位置调用上述方法

谢谢,
Sadik

但这不是页面对象模式?这是在页面对象模型中为对象定位器传递定位器参数的标准方法吗?这与在变量中定义定位器相同。若你们想在对象中传递值,那个么你们应该像上面那个样在同一个类中的方法中使用DefineLocator。