- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Typescript 的新手,虽然我认为我了解大部分内容,但我不明白的是为什么我不能对具有 Cypress.Chainable 类型的值使用标准 JS 方法。
例如:
const chainedString: Cypress.Chainable<string> = cy.wrap(" test ")
const trimmed = chainedString.trim()
抛出这样的错误:Property 'trim' does not exist on type 'Chainable<string>'
如何处理返回的、可链接的值并在其上使用 JS 方法而不会在键入时出错?
事实证明,在线搜索不是很有帮助 - Cypress 中 Typescript 项目的资源有限
更多内容如下...
这是自定义命令。下面是类型定义
Cypress.Commands.add('checkText', (XpathSelector, options?: CheckTextType ) => {
return cy.xpath(XpathSelector).invoke('text').then(text=>{
text = text.trim() // remove trailing whitespace
if(options!=undefined){
// if options has values provided, run checks
if(options.matchCase==undefined || options.matchCase==true){
//* Matching case!
try {
expect(text).to.contain(options.textToAssert)
} catch (error) {
if(options.ignoreError==false || options.ignoreError==undefined){
if(options.messageOnFail!=undefined){
throw new AssertionError(`${options.messageOnFail}. Error was \n ${error}`)
} else if(options.messageOnFail==undefined){
throw error
}
} else {
return cy.wrap(false)
}
}
} else {
//* NOT matching case!
try {
expect(Cypress._.toLower(text)).to.contain(Cypress._.toLower(options.textToAssert))
} catch (error) {
if(options.ignoreError==false || options.ignoreError==undefined){
if(options.messageOnFail!=undefined){
throw new AssertionError(`${options.messageOnFail}. Error was \n ${error}`)
} else if(options.messageOnFail==undefined){
throw error
}
} else {
return cy.wrap(false)
}
}
}
return cy.wrap(true);
}
return cy.wrap(text)
})
})
这是类型定义
export type CheckTextType = {
textToAssert:string
matchCase?:boolean
ignoreError?:boolean
messageOnFail?:string
}
declare global {
namespace Cypress {
/**
* @description Checks the asserted text against what the element has. Matching case default is *true*.
* @returns String of text from the element
* @param {String} XpathSelector The **Xpath** selector to use to grab the element in question.
* @param {String} textToAssert The string of element's text you want to assert on.
* @param {Boolean} matchCase Specify false if you want to use lowercase strings. Else, case will be matched
* @param {Boolean} ignoreError Speficy true if you want to ignore the default error thrown when command assertion fails
* @param {String} messageOnFail Input a string to include in the output if the command assertion fails
* @example cy.checkText("//div[contains(@class,'email-address')]", {textToAssert:"example@gmail.com", matchCase:false})
*/
checkText(XpathSelector:string, {textToAssert, matchCase, ignoreError, messageOnFail}?:CheckTextType):Chainable<Chainable<string> | Chainable<boolean>>
}
}
最佳答案
第一行也应该失败,因为您分配的字符串不是 Chainable。
应该是包裹
const chainedString: Cypress.Chainable<string> = cy.wrap(" test ");
其中 Chainable 是实现 Cypress 队列的包装器对象。
没有 .trim()
或任何其他字符串方法的原因是,
您可以使用 .then()
轻松处理展开的值
const chainedString: Cypress.Chainable<string> = cy.wrap(" test ")
chainedString
.then(str => str.trim()) // typescript infers str type from above
.should('eq', 'test')
关于typescript - Cypress + Typescript : How to use JS methods on return values of type Cypress. Chainable<字符串>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74426647/
我正在尝试制作一个简单的 jQuery 插件。我想像这样调用它的链接方法: $("#div").myPlugin({ /* options */ }).add(".span", { /
我试图在 PHP 中找到一个关于可链接 OOP 对象的很好的介绍,但还没有任何好的结果。 这样的事情怎么办? $this->className->add('1','value'); $this->cl
我想创建一个 python shell 脚本 myscript.py,它可以将输出提供给管道或接收管道的输入,不止一次。例如。 $ myscript.py |脚本.py |我的脚本.py ... 下面
在 Cypress 更新 9.0.0 后,出现以下错误 参数类型字符串不可分配给参数类型 keyof Chainable... 类型字符串不可分配给类型 "and"| “作为” | “模糊” | “检
JS新手问题在这里: 假设我有一些简单的字符串操作方法,比如这些愚蠢的例子: var prepend = function(str) { return 'foo ' + str }; var ex
我是 JavaScript 和测试的新手。直到最近,我才写了人生中的第一次测试。我指的是“Chai.js”文档,它说: The assert style is very similar to node
我是 Typescript 的新手,虽然我认为我了解大部分内容,但我不明白的是为什么我不能对具有 Cypress.Chainable 类型的值使用标准 JS 方法。 例如: const chained
我看到了这个on a blog today ,我想,终于! Rails 会有类似 HQL 的内容或Linq 。嗯,或者不是。我找不到任何关于此的信息。 我真正想知道的是:我是否能够忘记表的名称并仅使用
我是一名优秀的程序员,十分优秀!