[英]cy.wrap().its()... doesn't work when the value in .its() contains a period
我希望從我正在使用賽普拉斯測試的當前 URL 中提取一個 URL 參數。 我基本上可以從這篇 SO 帖子中得到答案,但是,當我使用賽普拉斯的.its() 命令時,我提取的值對我不可用。 url中的參數都有句點,我相信這是我出錯的原因。 這是我正在構建的自定義 Cypress 命令:
Cypress.Commands.add('getParmsCommand', function(value) {
cy.url().as('url')
cy.then( () => {
cy.log(this.url)
const kvPairArray = this.url.toString().split('?')[1].toString().split('&')
const paramObj = {}
kvPairArray.forEach(param => {
cy.log(param)
//default 'value' to 0 if it doesn't exist
const [ key, value="0" ] = param.split('=')
paramObj[key] = value
})
//forcefully adding a debug element to the key value store for testing
paramObj['beverage'] = 'soda'
cy.wrap(paramObj)
.its('timeline.ws') //doesn't work
// .its(`${Cypress.$.escapeSelector('timeline.ws')}`) doesn't work
// .its('timeline\.ws') doesn't work
// .its('"timeline.ws"') doesn't work
// .its('beverage') this DOES work!
.then(parmVal => {
cy.log(parmVal)
})
這是我試圖從中提取的 URL 的相關部分:
timeline.ws=3600000&timeline.to&timeline.fm&timeline.ar=false
從錯誤中可以看出,Cypress 只是在尋找 id timeline ,而不是timeline.ws ; 它完全忽略了這段時間之后的所有內容,因此永遠找不到我的參數。
我在 2018 年看到Cypress 的 .get() function 也有類似的錯誤。
我是 javascript 和賽普拉斯的新手,所以我希望這只是我忽略的一件奇怪的簡單事情。 在這一點上,非常歡迎任何建議或有根據的猜測!
謝謝你。
.its()
只是屬性提取的簡寫。 由於句點失敗,您可以在.then()
中使用括號表示法。
cy.wrap(paramObj)
.then(paramObj => paramObj['timeline.ws'])
要不就
cy.wrap(paramObj['timeline.ws'])
玩轉 URL構造函數
const urlString = 'http://example.com?timeline.ws=3600000&timeline.to&timeline.fm&timeline.ar=false'
const url = new URL(urlString)
cy.wrap(url.searchParams.get('timeline.ws'))
.should('eq', '3600000')
cy.wrap(url.searchParams.get('timeline.to'))
.should('be.empty')
cy.wrap(url.searchParams.get('timeline.ar'))
.should('eq', 'false')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.