2

我正在使用 Perl 和 Selenium 构建一个测试自动化项目。我正在使用页面对象模型。我有点不确定 Selenium 驱动程序在哪里适合页面对象模型的实现。

每个页面对象都应该“有”一个驱动程序吗?我的想法是每个页面对象代表页面提供给用户的一组服务。考虑到这个概念,页面对象与驱动程序没有“具有”关系。页面对象与驱动程序交互。但是,我仍在寻找建议。我应该将驱动程序作为 Web 应用程序中每个页面对象的一部分吗?

谢谢!

4

4 回答 4

2

这个答案与@zodvik 和您的思考过程没有太大区别,但它是另一种可选方法。您可以创建一个抽象类,而不是传递驱动程序,然后每个页面对象都可以从该类继承。从抽象类中,还可以包含一些您会发现自己经常使用的常用功能方法。

这至少是我在 Java 语言中的做法。

于 2016-09-28T00:03:32.177 回答
1

我总是将驱动程序作为每个页面对象的一部分。我对驱动程序的看法是它代表当前页面的状态。它提供对 URL、页面源等的访问权限。

现在,每个页面都有一个当前 URL、一个页面源代码、一个页面标题,这些都可以通过驱动程序访问。

于 2013-02-18T10:19:09.463 回答
0

顺便说一句,我实现了框架。我在包含常用元素的 commonFactory.class 中使用了驱动程序。每个页面都作为 commonFactory.class 的子类实现。所以你不必在每个类中实现驱动程序。由于驱动程序独立于测试场景,因此最好以单独的方式拥有它。

于 2019-01-02T09:58:27.407 回答
0

据我了解,没有实施 POM 的既定规则/标准。

但是,一般的经验法则是在您的框架中创建一个 BaseTest 和 BasePage 类,其中每个网页(如登录)将由其 PageClass(LoginPage) 表示。同样,您的所有 Page 类都将扩展您的 BasePage,所有测试都将扩展您的 BaseTest 类。

以下是其实现的粗略想法->


public class BaseTest{

@BeforeSuite()
setupMethod(){
initialize your WebDriver here
}

}

------------------------------------------
public class BasePage {

  //create constructor
  public BasePage(WebDriver driver) {
    this.driver = driver;
    this.wait = new WebDriverWait(this.driver, Duration.ofSeconds(TIMEOUT));
    PageFactory.initElements(new AjaxElementLocatorFactory(this.driver, TIMEOUT), this);
  }
  
  //other common methods which can be utilized in your respective child Page classes

}

----------------------------------------------------
public class LoginPage extends BasePage {

    //Your Locators and Weblelements 
    private static final LOGIN_ID = "login";
    
    //Constructor to supply webdriver
    public LoginPage(WebDriver driver) {
        super(driver);
    }
    
    //your action methods
    public void loginToApp(){
    driver.findbyelement(By.ID(LOGIN_ID)).click
    }

}
----------------------------------------------------
public class LoginTest extends BaseTest{

public LoginPage login;
BeforeAll()
{
login = new LoginPage(driver);
}

@Test
public void verifyLogin(){
login.loginToApp();
}

}

于 2021-11-23T09:30:16.443 回答