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

剧作家使用KeyClope测试网站,无法找到通过pageObjectModel登录的方法

印瑾瑜
2023-03-14

嗨(我在palywright是新来的),

我需要/想在剧作家中找到一种方法,通过pageObjectModel在一个使用键斗篷的应用程序中登录,但我不知道如何登录。

我找到了一种没有pageObject的方法,在第一个测试中登录并在process.env.存储中保存身份验证,然后在file.spec.js中的其余测试中使用test.use({storageState:auth_storage_path});

注意:keydepeat有效(很抱歉提供此基本信息)

  • 用户未登录-
//tests_with_auth_store.spec.js

    const {test, expect}    = require('@playwright/test');
    const auth_storage_path = 'storage_auth.json';
    const baseUrl           = 'https://myBaseUrl_xyz.com';


    test('mylogin', async ({page, context}) => {
      const usernameId    = '[id="username"]';
      const passwordId    = '[id="password"]';
      const idLogin       = '[id="login-button"]';
      const usernameValue = '*****';
      const passwordValue = '*****';
    
      //login:
      await page.goto(baseUrl);
      await page.fill(usernameId, usernameValue);
      await page.fill(passwordId, passwordValue);
    
      await Promise.all([
        page.waitForNavigation(/*{ baseUrl: baseUrl }*/),
        page.click(idLogin)
      ]);
      process.env.STORAGE = null;
      const storage = await context.storageState({ path: auth_storage_path });
      process.env.STORAGE = JSON.stringify(storage);
      JSON.parse(process.env.STORAGE);
    
    });
    
    test.describe("testDescription login via pageObjectModel", () => {
    
      test.use({storageState: auth_storage_path});
    
      test('i- firstTest whatever ', async ({page}) => {
        await page.goto(baseUrl);
        ......
        ....
      });

      test('ii- secondTest whatever ', async ({page}) => {
        await page.goto(baseUrl);
        ......
        ....
      });
});

这个工作正常,所有测试都在test.use({storageState:auth_storage_path});可以直接跳转到basUrl。问题是,我找不到一种方法来封装测试('登录')到一个playwright pageObject(在柏树中,我们在commands.js简单的func中做到了这一点,并将授权保存到cookie中)

我的login-page.js演示:

// login-page.js
const { expect, test} = require('@playwright/test');
const baseUrl = 'https://myBaseUrl_xyz.com';
const auth_storage_path = 'storage_auth.json';

exports.LoginPage = class LoginPage {
  
  /**
   * @param {import('@playwright/test').Page} page
   */
  
  constructor(page) {
    this.page = page;
  }
  
   async login() {
     process.env.STORAGE = null;
     const baseUrl = 'https://myBaseUrl_xyz';

     await this.page.goto(baseUrl);
     await this.page.fill('[id="username"]', '*****');
     await this.page.fill('[id="password"]', '*****');

     await Promise.all([
      this.page.waitForNavigation(/*{ baseUrl: baseUrl }*/),
      this.page.click('[id="fc-login-button"]')
    ]);


     const storage = await this.page.context().storageState({path: auth_storage_path});
     process.env.STORAGE = JSON.stringify(storage);
     JSON.parse(process.env.STORAGE);
  }
  

  // async gotoBaseUrl() {
  //   test.use({storageState: auth_storage_path});
  //   return  this.page.goto(baseUrl);
  // }
  
}

使用_auth_store _viaPage.spec.js从tests_调用登录页面

// tests_with_auth_store_viaPage.spec.js
const {test, expect} = require('@playwright/test');
const { LoginPage } = require('../login/login-page');
const auth_storage_path = 'storage_auth.json';

const baseUrl = 'https://myBaseUrl_xyz.com';

test('login', async ({page}) => {
  const loginPage = new LoginPage(page);
  await loginPage.login();
});

test.describe("testDEscription tests with save login into json", () => {

  test.use({storageState: auth_storage_path});

  test('i- firstTest whatever', async ({page}) => {
    await page.goto(baseUrl);
    ......
    ....
   });

但是这里的test('i-firstTest whatever')页面。goto(baseUrl)不会跳转到baseUrl,而是跳转到keydape auth页面:(。

eventhougtest('login')是登录并创建存储\u auth.json。所以我做错了什么,也许我需要像loginPage.gotoBaseUrl()这样的东西,但它不起作用。

到目前为止,我正在编写其余的所有测试,包括总是第一个测试('mylog),但我相信有一种方法通过pageObject

当做

共有1个答案

南宫嘉
2023-03-14

已经找到路了。我找到了自己的路。如果有人需要帮助,请尽管问我

 类似资料:
  • 问题内容: 我有以下代码,可用于以编程方式登录网站。但是,它不返回登录页面的html(带有用户数据信息),而是返回登录页面的html。我试图多次查找出问题所在,但似乎找不到。 [注意]登录表单中有一行: 但这没有“名称”属性,因此我没有发布 任何答案/评论表示赞赏! [UPDATE2]对于登录页面,浏览器显示以下内容… 问题答案: 您必须分两个阶段登录该站点。 第1阶段-您向该URL 发送请求-

  • 我可以使用这个简单的脚本登录facebook、google或stackoverflow(或者根据ID的不同而略有变化)。但是,我的公司有一个网站,我无法使用powershell登录该网站。 我认为唯一的区别是该网站位于我们的“内部网”上,而不是互联网上,出于某种原因,powershell将两者区分开来。但我不确定,我仍然可以正常打开IE,进入url并查看源代码,查看标签ID等等。 有人知道我在本例

  • 我正在尝试使用jsoup登录一个网站,我很确定我正在解析所有需要解析的东西,我只是不知道出了什么问题。 我用这个做参考:http://cs.harding.edu/fmccown/android/Logging-into-Pipeline.pdf 以下是我的AsycntTask doInBackground中的代码: 但问题是,当我登录时,它不包含页面的文档,它包含一个错误页面的文档,该页面只显示

  • 问题内容: 我已经广泛阅读了有关此操作的信息,并尝试了许多不同的版本,但无法使其正常工作。 基本上,我只想登录ConEdison网站并抓取我的帐单记录。这是我所拥有的: 我知道该信息是正确的(尽管我不知道是否真的需要传递没有值的数据参数)。 我没有任何错误,只是打印了登录页面(https://apps.coned.com/cemyaccount/NonMemberPages/Login.aspx?

  • 我有一个批处理文件,其中有用户名和密码登录以下格式的网站在第16行第5个字是用户名,第7个字是密码。 启动VPNGUI-c-用户1000-pwd 123456 我需要一个关于JavaScript的帮助,它应该打开网站主页,阅读批量文件收集用户名和密码,自动填写用户名和密码在主页上,并使用发送键登录。我已经尝试过使用vbscript,下面是我的代码,但我需要Java版本,它应该允许用户一次点击就自动

  • 问题内容: 在此网站上,您可以输入您的学生卡号,然后显示该卡上还剩多少钱。我想使用JSOUP获得信息。这是我当前的代码,但是不起作用, 我没有太多经验,所以我不知道在哪里寻找问题。一些想法: 我应该使用还是? 在使用chrome devoloper工具时,发布数据是我使用功能发送的所有数据。但是,如果发送时出现错误,为什么? 我应该发送解密或加密的数据吗?(两者均在chrome devoloper