当前位置: 首页 > 知识库问答 >
问题:

定位器和页面对象模型

卢出野
2023-03-14

我想在我的页面对象中使用剧作家的定位器。我找到了一个Javascript示例(为了简洁起见,将其剥离):

import { Page } from '@playwright/test';

export class TodoPage {
  listItems = this.page.locator('.todo-list li');

  constructor(public readonly page: Page) { }
}

试图在我的Java代码中做同样的事情:

public class LoginPage {

    private Page page;

    private Locator loginButton = this.page.locator("#loginButton");

    public LoginPage(Page page){
        this.page = page;
    }
}

引发空指针异常,因为初始化登录按钮时,页面尚未启动。

我可以

private Locator loginButton;

public LoginPage(Page page){
    this.page = page;

    loginButton =  this.page.locator("#loginButton");
}

但是对于大型页面对象类来说,这将变得有点冗长/混乱。

有没有关于如何在Java中实现这一点的想法?

谢谢

共有1个答案

茹高义
2023-03-14

我可以创建一个定位器类:

public class LoginPageLocators {

    public Locator LoginButton;

    public LoginPageLocators(Page page) {
        LoginButton = page.locator("#loginButton");
    }
}

然后通过eg定位器访问页面对象类中的定位器。LoginButton.click().

它无法避免笨拙/混乱,但至少可以在page对象类中隐藏它。

 类似资料:
  • 问题内容: 我们正在使用 Page Object模式 来组织内部AngularJS应用程序测试。 这是我们拥有的示例页面对象: 在单浏览器测试中,非常清楚如何使用它: 但是,当涉及到实例化多个浏览器并且需要在单个测试中在它们之间进行切换的测试时,变得不清楚如何在多个浏览器中使用同一页面对象: 问题: 分叉新浏览器后,如何使用相同的Page Object字段和函数,但将其应用于新实例化的浏览器(在这

  • 我正在使用Selenium为我的网站构建一个测试框架,我实际上希望您在使用页面对象模型时对良好实践的想法:让我们说,我有一个欢迎页面,其中包含一个注销按钮存在的标题,这个标题可以在大多数页面中看到在我的页面中,我认为最好为标题写一个单独的类,比如: 公共类欢迎页 我的问题是,你认为在欢迎页面中包含标题作为属性更好还是应该将它们分开? 让我们以注销测试方法的代码为例: 案例一: 案例2: 第二个问题

  • 是否有任何Gem(比如siteprism:用于Web自动化测试)可以在我的移动自动化测试项目中使用,以使用页面对象模型模式定义屏幕。 提前谢谢

  • 我正在使用Perl和Selenium构建一个测试自动化项目。我正在使用页面对象模型。我有点不确定Selenium驱动程序将适合页面对象模型的实现。 每个页面对象是否应该“有”一个驱动程序?我的想法是,每个页面对象代表页面向用户提供的一组服务。考虑到这个概念,页面对象与驱动程序没有“has-a”关系。页面对象与驱动程序交互。不过,我仍在寻求建议。我应该将驱动程序作为web应用程序中每个页面对象的一部

  • 想象有一个页面在说http://google.com/AddUser在这里输入记录的详细信息,然后单击保存。完成此操作后,页面将重定向到 http://google.com/userList 您可以在其中查看用户列表,包括您刚刚输入的新记录。 如果我们按照页面对象模型,那么在和验证记录是否实际保存和显示的方法应该在 如果我们认为addUser和userList是两个类的对应对象,它会像下面这样:

  • 我们如何等待IWebElement(重新)连接到DOM?我的场景是这样的,我从dropdown1中选择一个值,然后单击dropdown2上的数据绑定。所以当我的测试像从Dd1中选择“foo”,然后从Dd2中选择“bar”- 但是我真的不想把定位器字符串(“foo”)带到我的测试逻辑中,因为它似乎破坏了使用页面对象模型的意义。使用页面对象模型时,我已经有了IWebElement实例 那么,您知道隐式