第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JS:傳遞一個包含函數(shù)/方法屬性的對象,然后在另一個文件中傳遞并調(diào)用傳入的對象函數(shù)/方法屬性?

JS:傳遞一個包含函數(shù)/方法屬性的對象,然后在另一個文件中傳遞并調(diào)用傳入的對象函數(shù)/方法屬性?

一只斗牛犬 2023-09-14 20:14:36
我正在努力為登錄功能添加額外的檢查。如果傳遞給函數(shù)的對象包含屬性名稱additionalSteps,它將調(diào)用additionalSteps 屬性。但是,每當(dāng)我到達(dá)調(diào)用步驟時,都會收到一條錯誤消息,指出該屬性不是函數(shù)或未定義。options.additionalSteps(取決于我如何通過調(diào)用對象 property( ) 或?qū)⒕植孔兞糠峙浣o對象 property( )來調(diào)整代碼let additionalSteps。)我想知道是否可以傳遞一個具有定義函數(shù)/方法的屬性的對象,然后將該對象傳遞到導(dǎo)入類(或使用)的函數(shù)中,該函數(shù)將檢查屬性名稱是否存在,然后調(diào)用該對象的require函數(shù)如果條件為真。我可以讓其他文件定義并處理該函數(shù),但我希望用戶按照他們的意愿定義屬性函數(shù)。根據(jù)我對該主題的研究,我對屬性的感覺是不可能通過對象內(nèi)的另一個文件傳遞函數(shù)/方法。(有關(guān)具有函數(shù)的對象屬性的所有信息和示例似乎暗示這不受支持。)測試代碼:async function fewMoreSteps({page, options} = {}) {  console.log('This is the addtional step...')  await page.waitForSelector('#header_notification_link', {visible: true})  await page.click('#header_notification_link')}describe('Test Login', () => {  // eslint-disable-next-line jest/no-focused-tests  it.only('Login with custom function', () => {    const username = Cypress.env('steamUserName')    const password = Cypress.env('steamUserNamePW')    const loginUrl = Cypress.env('loginUrl')    const loginSelector = Cypress.env('loginSelector')    const cookieName = Cypress.env('cookieName')    const socialLoginOptions = {      username,      password,      loginUrl,      // Add username/pw fields and buttons and addtional steps      usernameField: '#input_username',      passwordField: '#input_password',      passwordSubmitBtn: '#login_btn_signin',      // make this a global passed function      additionalSteps: async function({page, options} = {}) {        /*console.log('This is the addtional step...')        await page.waitForSelector('#header_notification_link', {visible: true})        await page.click('#header_notification_link') */         await fewMoreSteps({page, options})      },      isPopup: true,      popupDelay: 6000,      logs: true,      headless: false,      loginSelector: loginSelector,      postLoginClick: '#account_pulldown',      postLoginSelector: '#account_dropdown div.popup_menu a.popup_menu_item:first-of-type'    }  })}
查看完整描述

1 回答

?
郎朗坤

TA貢獻(xiàn)1921條經(jīng)驗 獲得超9個贊

解決了我的問題。問題來自測試文件。具有函數(shù)屬性的對象似乎不太適合cy.task(). (可能在嘗試引用 addtionalSteps 函數(shù)時遇到了麻煩。需要研究我的最初嘗試是否可以在 Cypress 中進(jìn)行。)相反,我在 Cypress 插件索引文件中添加了additionStep 檢查。


賽普拉斯插件:


const {customizedLogin} = require('../../src/Plugins').CustomizedLogin


async function fewMoreSteps({page, options} = {}) {

  console.log('This is the addtional step...')

  await page.waitForSelector('#header_notification_link', {visible: true, timeout: 6000})

  await page.click('#header_notification_link')

}


module.exports = (on, config) => {

  // `on` is used to hook into various events Cypress emits

  // `config` is the resolved Cypress config

  on('task', {

    customizedLogin: (options) => {

      if (options.moreSteps) {

        options.additionalSteps = fewMoreSteps

      }

      return CustomizedLogin(options)

    }

  }

  )

}

現(xiàn)在,我不需要為 CustomizedLogin 函數(shù)添加額外的變量,并且在調(diào)用 addtionalSteps 時(預(yù)計有檢查條件)。


module.exports.CustomizedLogin = async function CustomizedLogin(options = {}) {

  if (options.usernameField && options.passwordField) {

    const typeUsername = async function({page, options} = {}) {

      await page.waitForSelector(options.usernameField, {visible: true})

      await page.type(options.usernameField, options.username)

      if (options.usernameSubmitBtn) {

        await page.click(options.usernameSubmitBtn)

      }

    }

    const typePassword = async function({page, options} = {}) {

      await page.waitForSelector(options.passwordField, {visible: true})

      await page.type(options.passwordField, options.password)

      if (options.passwordSubmitBtn) {

        await page.click(options.passwordSubmitBtn)

      }

    }

    const postLogin = async function ({page, options} = {}) {

      await page.waitForSelector(options.postLoginClick)

      await page.click(options.postLoginClick)

    }

    return baseLoginConnect(typeUsername, typePassword, null, null, postLogin, options)

  } else {

    throw new Error('Please review your option properties. Propeties usernameField and passwordField are required as type String.')

  }

}


// When options.addtionalSteps is invoked

if (typeof options.additionalSteps !== 'undefined') {

    await options.additionalSteps({page, options})

  }


查看完整回答
反對 回復(fù) 2023-09-14
  • 1 回答
  • 0 關(guān)注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號