Select 使用 Cypress 从下拉列表中过滤的选项
Select the filtered option from the dropdown using Cypress
我有一个下拉菜单,类似于查找,需要测试。我必须输入一个值,然后根据该值过滤选项。而且,我必须选择我想要的选项。
例如,根据提供的值过滤的一些选项将采用以下格式:
ENG 101 English-Read and Write
ENG 101 English-Speaking
ENG 101 English-Listening
MAT 201 Mathematics-Algebra
CSC 301 JAVA-Programming
CSC 301 CSharp-Programming
我只能在字段中输入第一列中的值 - 'ENG' 或 'MAT' 或 'CSC' 来过滤选项。
现在,如果我在字段中提供值 'MAT',则只会过滤一个选项。 select 选项 'Mathematics-Algebra' 没问题。
如果我提供 'ENG' 的值进行过滤,则会过滤多个选项。现在,我必须 select 选项 'English-Listening'。这就是我遇到的问题。
cy.get('app-screen').find('#paper-description').type('ENG'); // this is for providing input 'ENG'
cy.get('.overlay-pane').find('mat-option span:nth-child(3)').should('have.text', 'English-Listening'); // this is for selecting the required filtered option.
执行上述语句时,出现以下断言错误。
Timed out retrying after 4000ms: expected '[ <span.col-3>, 2 more... ]' to have text English-Listening, but the text was English-Read and WriteEnglish-SpeakingEnglish-Listenting
html 结构将采用以下格式:
<div class='overlay-pane'>
<mat-option>
<span class='.col-1>ENG</span>
<span class='.col-2>101</span>
<span class='.col-3>English-Read and Write</span>
</mat-option>
<mat-option>
<span class='.col-1>ENG</span>
<span class='.col-2>101</span>
<span class='.col-3>English-Speaking</span>
</mat-option>
<mat-option>
<span class='.col-1>ENG</span>
<span class='.col-2>101</span>
<span class='.col-3>English-Listening</span>
</mat-option>
</div>
这次select编辑的选项可能是'English-Listening'。下一次,它可能是 'English-Speaking' 或其他一些选项。如何 select 从查找的多个过滤项目中选择所需的选项?
您可以为此使用 within
:
cy.get('app-screen').find('#paper-description').type('ENG')
cy.get('.overlay-pane')
.find('mat-option')
.eq(2)
.within(() => {
cy.get('.col-3').should('have.text', 'English-Listening').click()
})
如果您不知道建议列表中文本的确切位置,您也可以使用 contains
:
cy.get('app-screen').find('#paper-description').type('ENG')
cy.contains('span', 'English-Listening').should('be.visible').click()
你可以用 find
来做这个
cy.get('app-screen').find('#paper-description').type('ENG')
cy.get('.overlay-pane')
.find('mat-option')
.eq(2)
.find('.col-3').should('have.text', 'English-Listening')
.click()
对于 material 选项,您应该单击 mat-option
cy.get('app-screen').find('#paper-description').type('ENG')
cy.contains('mat-option', 'English-Listening').click()
我有一个下拉菜单,类似于查找,需要测试。我必须输入一个值,然后根据该值过滤选项。而且,我必须选择我想要的选项。
例如,根据提供的值过滤的一些选项将采用以下格式:
ENG 101 English-Read and Write
ENG 101 English-Speaking
ENG 101 English-Listening
MAT 201 Mathematics-Algebra
CSC 301 JAVA-Programming
CSC 301 CSharp-Programming
我只能在字段中输入第一列中的值 - 'ENG' 或 'MAT' 或 'CSC' 来过滤选项。
现在,如果我在字段中提供值 'MAT',则只会过滤一个选项。 select 选项 'Mathematics-Algebra' 没问题。
如果我提供 'ENG' 的值进行过滤,则会过滤多个选项。现在,我必须 select 选项 'English-Listening'。这就是我遇到的问题。
cy.get('app-screen').find('#paper-description').type('ENG'); // this is for providing input 'ENG'
cy.get('.overlay-pane').find('mat-option span:nth-child(3)').should('have.text', 'English-Listening'); // this is for selecting the required filtered option.
执行上述语句时,出现以下断言错误。
Timed out retrying after 4000ms: expected '[ <span.col-3>, 2 more... ]' to have text English-Listening, but the text was English-Read and WriteEnglish-SpeakingEnglish-Listenting
html 结构将采用以下格式:
<div class='overlay-pane'>
<mat-option>
<span class='.col-1>ENG</span>
<span class='.col-2>101</span>
<span class='.col-3>English-Read and Write</span>
</mat-option>
<mat-option>
<span class='.col-1>ENG</span>
<span class='.col-2>101</span>
<span class='.col-3>English-Speaking</span>
</mat-option>
<mat-option>
<span class='.col-1>ENG</span>
<span class='.col-2>101</span>
<span class='.col-3>English-Listening</span>
</mat-option>
</div>
这次select编辑的选项可能是'English-Listening'。下一次,它可能是 'English-Speaking' 或其他一些选项。如何 select 从查找的多个过滤项目中选择所需的选项?
您可以为此使用 within
:
cy.get('app-screen').find('#paper-description').type('ENG')
cy.get('.overlay-pane')
.find('mat-option')
.eq(2)
.within(() => {
cy.get('.col-3').should('have.text', 'English-Listening').click()
})
如果您不知道建议列表中文本的确切位置,您也可以使用 contains
:
cy.get('app-screen').find('#paper-description').type('ENG')
cy.contains('span', 'English-Listening').should('be.visible').click()
你可以用 find
来做这个
cy.get('app-screen').find('#paper-description').type('ENG')
cy.get('.overlay-pane')
.find('mat-option')
.eq(2)
.find('.col-3').should('have.text', 'English-Listening')
.click()
对于 material 选项,您应该单击 mat-option
cy.get('app-screen').find('#paper-description').type('ENG')
cy.contains('mat-option', 'English-Listening').click()