【发布时间】:2022-11-23 04:10:52
【问题描述】:
我希望从我正在使用 Cypress 测试的当前 URL 中提取 URL 参数。我基本上能够从this SO post 得到答案,但是,当我使用赛普拉斯的.its() command 时,我提取的值对我不可用。 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时间线, 不是时间线.ws;它完全忽略了这段时间之后的所有内容,因此永远找不到我的参数。
我在 2018 年看到有一个 similar error with Cypress's .get() 函数。
我是 javascript 和 Cypress 的新手,所以我希望这只是我忽略的一件奇怪的简单事情。在这一点上,非常欢迎任何建议或有根据的猜测!
谢谢你。
【问题讨论】:
-
你有没有控制台记录你的
paramObj来检查它是否正常工作? -
是否需要以这种方式使用该对象?你能不能把
paramObj['timeline.ws']包装起来? -
顺便说一句,看看 URL 作为替代
paramObj构造函数。
标签: javascript cypress special-characters cypress-testing-library cypress-custom-commands