我需要在过滤器中选择几个元素并检查数据是否会根据过滤器显示。我正在尝试将元素的文本保存在变量中,并在最后进行检查。
it.only('the UI with a lot of entries in a filter, should be responsive', () => {
let listItem1
let listItem2
cy.get('someTab').click().then(()=> {
cy.getText(cy.get('someSelector').first(), listItem1)
cy.getText(cy.get('someSelector').last(), listItem2)
}).then(()=> {
cy.get('someSelector').first().click()
cy.get('someSelector').last().click()
cy.get('someButton').click()
}).then(()=>{
cy.log(listItem1, listItem2) // nothing is visible
cy.get('span[data-app]').should('contain', listItem1) // fail
cy.get('span[data-app]').should('contain', listItem2) // fail
})
})
我使用这个功能:
getText(selector, variable) {
return selector.invoke('text')
.then(($text) => {
variable = $text.trim()
})
}
它不起作用,但我无法理解如何修复它
答案 0 :(得分:2)
基本问题是在 <body>
<div class="main">
<div id=box-a>
<div class=header-button>About</div>
<div class=header-button>How to</div>
<div class=header-button>Info</div>
<div class=header-button>More</div>
</div>
<div id=box-b>
<p>
This is the content of box B.
</p>
</div>
<div id=box-c>
<p>
This is the content of box C.
</p>
</div>
</div>
</body>
中,您要赋予值的第二个参数是“按值”传递的,但要设置和稍后使用它需要“按引用”传递。
如果你“按值传递”,设置变量在函数之外没有任何影响。
有关背景信息,请参阅 Pass variables by reference in JavaScript。
在 javascript 中无法“通过引用”传递,但您可以包装在容器对象中并修改属性
getText(selector, variable)
您可以将 function getText(selector, container, variableName) {
selector.invoke('text')
.then(($text) => {
container[variableName] = $text.trim()
})
}
it('the UI...', () => {
const container = { // Note const because container never changes
listItem1: null, // only properties will change
listItem2: null
}
cy.get('someTab').click().then(() => {
cy.getText(cy.get('someSelector').first(), container, 'listItem1')
cy.getText(cy.get('someSelector').last(), container, 'listItem2')
}).then(() => {
cy.get('someSelector').first().click()
cy.get('someSelector').last().click()
cy.get('someButton').click()
}).then(() => {
cy.log(container.listItem1); // listItem1 is visible
cy.log(container.listItem2); // listItem2 is visible
cy.get('span[data-app]').should('contain', container.listItem1)
cy.get('span[data-app]').should('contain', container.listItem2)
})
})
更改为自定义命令
getText()