我是stackoverflow的新手,所以很抱歉,如果这有点到处都是,但我似乎找不到任何简单的在线答案,似乎是一个相当小的任务!(
我正试图从弹出窗口复制一些数据,上面写着"祝贺,您的Ref (REF1234)成功完成"之类的内容。(只是REF1234部分)并复制它粘贴到下一个屏幕上的另一个字段…这是我到目前为止所拥有的,希望对某人有意义…
export function addRefToThing() {
cy.get('[class="ref-success"]').find(':selected').contains('REF').then(($clipboard) => {
const copiedRef = $clipboard[0]._vClipboard.clipboardAction.text;
// <<filler steps, moving around pages>> //
webpage.RefNo().type(copiedRef)})
这几乎是我所能得到的,让我心烦意乱…看起来它被困在-find :selected
,但实际上不确定它甚至复制了我想要的数据…
我对柏树很陌生,所以这很令人困惑,如果有人有关于这种要求的好的培训材料,那就太棒了!提前感谢!
HTML:
<div class="notification-group" style="width: 300px; bottom: 0px; right: 0px;">
<span>
<div data-id="1" class="notification-wrapper" style="transition: all 300ms ease 0s;">
<div class="notification-template notification success">
<div class="notification-title">Successful</div>
<div class="notification-content">Ref (REF123456789) created successfully</div>
</div>
</div>
</span>
</div>
尝试使用正则表达式解析ref.
使用/(REF([0-9]+))/
你得到两个匹配,
- 匹配[0]是整个"(REF123456789)"
- matches[1]是内部组"123456789">
cy.get('div.notification-content')
.then($el => $el.text().match(/(REF([0-9]+))/)[1]) // parsing step
.then(ref => {
webpage.RefNo().type(ref)
})
在你的函数中,
export function addRefToRef() {
cy.get('[class="ref-success"]').find(':selected').contains('REF')
.then(($clipboard) => {
const copiedRef = $clipboard[0]._vClipboard.clipboardAction.text;
const innerRef = copiedRef.match(/(REF([0-9]+))/)[1];
// <<filler steps, moving around pages>> //
webpage.RefNo().type(innerRef)
})
}
您可以直接从notification-content
div中保存内部文本值,稍后使用。你不必使用剪贴板方法。
//Some code that will trigger the notification
cy.get('.notification-content')
.should('be.visible')
.invoke('text')
.then((text) => {
cy.log(text) //prints Ref (REF123456789) created successfully
})
如果您想保存它,然后在稍后的测试中使用它,您可以使用别名.as
:
//Some code that will trigger the notification
cy.get('.notification-content')
.should('be.visible')
.invoke('text')
.as('notificationText')
//Some other code
cy.get('@notificationText').then((notificationText) => {
cy.log(notificationText) //prints Ref (REF123456789) created successfully
})
或者,如果你想断言内容:
- 精确匹配:
cy.get('.notification-content')
.should('be.visible')
.and('have.text', 'Ref (REF123456789) created successfully')
- 部分匹配
cy.get('.notification-content')
.should('be.visible')
.and('include.text', 'REF123456789')
如果你只想提取参考编号,那么你必须首先使用split
来获取第二个文本,然后使用slice
来删除左括号和右括号,就像这样:
//Some code that will trigger the notification
cy.get('.notification-content').should('be.visible').invoke('text').as('notificationText')
//Some other code
cy.get('@notificationText').then((notificationText) => {
cy.log(notificationText.split(' ')[1].slice(1,-1)) //REF123456789
})