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

Page对象在Playwright中不返回选择器

曾华翰
2023-03-14

使用微软的剧作家,我有这个测试代码,工作:

  describe('When a user views a list of forms', () => {
    let rows;

    before(async() => {
      await page.waitForSelector('tbody');
      rows = await page.$$('tr');
    });

    it('should show a table of forms', async() => {
      rows.length.should.equal(11);
    });

我想把它分解成一个页面对象。我把它作为我的页面对象

class UserFormsPage {
  constructor(page) {
    this.page = page;
  }

  async rows() {
    await this.page.waitForSelector('tbody');
    return await this.page.$$('tr');
  }       
}         

作为我的测试:


describe.only('List Forms Widget', function() {                                                                 
  let page;
  ...

  before(async function() {                                                      
    const context = await this.browser.newContext();                             
    page = await context.newPage();                                              
    const userFormsPage = new UserFormsPage(page);
  ...

  describe('When a user views a list of forms', () => {
    let rows;
     ...

    before(async() => {
      rows = await userFormsPage.rows();
    });                   
            
    it('should show a table of forms', async() => {
      rows.length.should.equal(11);
    });

但我明白了

  1) List Forms Widget
       When a user views a list of forms
         "before all" hook for "should show a table of forms":
     TypeError: Cannot read property 'rows' of undefined

这是为什么呢?

注意:如果需要的话,在节点16中使用本地es模块

共有1个答案

怀浩大
2023-03-14

您的rows()方法是异步的。每个异步方法都返回一个promise,因此在钩子中,rows=userFormsPage。行() 只会导致promise{

如果你想要号码,你必须等待:

before(async () => {
  rows = await userFormsPage.rows();
}); 

另一个问题似乎是您没有(至少在您的问题中没有)任何UserFormsPage对象的创建。构造函数需要页面,但您似乎没有提供它。

 类似资料:
  • 我正在使用PlayWright,希望在DOM中找不到元素时执行操作。 我的代码看起来类似于: 这不管用。我怎样才能做到这一点?

  • 用于选择对象的选项 在可以修改某个对象之前,需要将其与周围的对象区分开来。只需选择对象,即可加以区分。只要选择了对象或者对象的一部分,即可对其进行编辑。 Illustrator 提供以下选择方法和工具: 隔离模式可让您快速将一个图层、子图层、路径或一组对象与文档中的其他所有图稿隔离开来。在隔离模式下,文档中所有未隔离的对象都会变暗,并且不可对其进行选择或编辑。 图层面板可让您快速而准确地选择单个或

  • 我试图模拟一个对象,该对象返回一个带有Mockito的Java可选对象: 当被调用,它返回。 我希望方法返回 返回的任何原因? 方法如下: 以下是Junit:

  • 主要内容:示例JSP page 的实质是 java.lang.Object 对象,相当于 Java 中的 this 关键字。page 对象是指当前的 JSP 页面本身,在实际开发中并不常用。 page 对象的常用方法如下: page 对象的常用方法 方  法 说  明 class getClass() 返回当前页面所在类 int hashCode() 返回当前页面的 hash 代码 String toStrin

  • page对象表示由JSP页面生成的Servlet类的对象实例本身。page对象实际上是Object类型的对象。但可以将page对象转换成相应的Servlet类型的对象。在下面的代码中输出了page对象的类型信息,并通过反射技术输出了由JSP生成的Servlet类中的所有public方法名。 <!-- page.jsp --> <%@ page language="java" pageEncod

  • 我在反应中有一个选择,只是想console.log选择的值。我的问题是console.log返回最后选择的值。例如,如果我选择4,然后是3,然后是5,代码将呈现1(默认值),然后是4,然后是3。 这是我的JSX代码: 这是处理输入更改的函数: