gpt4 book ai didi

angularjs - 使用 cypress 选择下拉列表项

转载 作者:行者123 更新时间:2023-12-04 07:49:23 25 4
gpt4 key购买 nike

我需要使用 cypress 测试 angularjs 应用程序的下拉列表。

我需要单击下拉列表并从下拉列表中选择或单击一个项目。我尝试如下,它适用于一个实例,但不适用于其他时间,因为第二个 get() 方法中的 id 号随着其动态生成而不断变化。这不是带有 html 选项的标准选择。

1)无论如何我可以为每个选项设置一个唯一的属性并只选择所需的一个,或者我可以根据列表项的描述进行选择吗?我怎样才能做到这一点?

2) 以下是测试下拉列表的正确方法吗?我确定还有比这更好的方法吗?

请任何人都可以帮忙

cy.get('[name="countries"]').click().get.('[id="selection_option_375"]').click()

DOM
 <md-select ng-model="target.countryType" name="countries" ng-required="requiredData.AssertRequiredFields" ng-change="oncountryTypeChanged($event)" 
md-container-class="large" class="ng-pristine ng-untouched ng-empty ng-invalid ng-invalid-required" tabindex="0" aria-disabled="false"
role="listbox" aria-expanded="false" aria-multiselectable="false" id="select_297" aria-owns="select_container_298" aria-required="true"
required="required" aria-invalid="true" aria-label="country type" style=""><md-select-value class="md-select-value md-select-placeholder"
id="select_value_label_288">
<span>country type</span><span class="md-select-icon" aria-hidden="true"></span>
</md-select-value>
<div class="md-select-menu-container large" aria-hidden="true" id="select_container_298"><md-select-menu class="_md"><md-content class="_md md-no-flicker">
<!-- ngRepeat: countryType in refData.countryDetails.countryType.Items --><md-option ng-repeat="countryType in refData.countryDetails.countryType.Items" ng-value="countryType" tabindex="0" class="ng-scope md-ink-ripple" role="option" aria-selected="false" id="select_option_369" aria-checked="true" value="[object Object]" style=""><div class="md-text ng-binding">
Country one
</div></md-option><md-option ng-repeat="countryType in refData.countryDetails.countryType.Items" ng-value="countryType" tabindex="0" class="ng-scope md-ink-ripple" role="option" aria-selected="false" id="select_option_370" aria-checked="true" value="[object Object]" style=""><div class="md-text ng-binding">
Country two
</div></md-option><md-option ng-repeat="countryType in refData.countryDetails.countryType.Items" ng-value="countryType" tabindex="0" class="ng-scope md-ink-ripple" role="option" aria-selected="false" id="select_option_371" aria-checked="true" value="[object Object]" style=""><div class="md-text ng-binding">
Country three
</div></md-option><md-option ng-repeat="countryType in refData.countryDetails.countryType.Items" ng-value="countryType" tabindex="0" class="ng-scope md-ink-ripple" role="option" aria-selected="false" id="select_option_372" aria-checked="true" value="[object Object]" style=""><div class="md-text ng-binding">
Country four
</div></md-option><md-option ng-repeat="countryType in refData.countryDetails.countryType.Items" ng-value="countryType" tabindex="0" class="ng-scope md-ink-ripple" role="option" aria-selected="false" id="select_option_373" aria-checked="true" value="[object Object]" style=""><div class="md-text ng-binding">
Country five
</div></md-option><md-option ng-repeat="countryType in refData.countryDetails.countryType.Items" ng-value="countryType" tabindex="0" class="ng-scope md-ink-ripple" role="option" aria-selected="false" id="select_option_374" aria-checked="true" value="[object Object]" style=""><div class="md-text ng-binding">
Country six
</div></md-option><md-option ng-repeat="countryType in refData.countryDetails.countryType.Items" ng-value="countryType" tabindex="0" class="ng-scope md-ink-ripple" role="option" aria-selected="false" id="select_option_375" aria-checked="true" value="[object Object]" style=""><div class="md-text ng-binding">
Country seven
</div></md-option><md-option ng-repeat="countryType in refData.countryDetails.countryType.Items" ng-value="countryType" tabindex="0" class="ng-scope md-ink-ripple" role="option" aria-selected="false" id="select_option_376" aria-checked="true" value="[object Object]" style=""><div class="md-text ng-binding">
Country eight
</div></md-option><md-option ng-repeat="countryType in refData.countryDetails.countryType.Items" ng-value="countryType" tabindex="0" class="ng-scope md-ink-ripple" role="option" aria-selected="false" id="select_option_377" aria-checked="true" value="[object Object]" style=""><div class="md-text ng-binding">
Country nine
</div></md-option><md-option ng-repeat="countryType in refData.countryDetails.countryType.Items" ng-value="countryType" tabindex="0" class="ng-scope md-ink-ripple" role="option" aria-selected="false" id="select_option_378" aria-checked="true" value="[object Object]" style=""><div class="md-text ng-binding">
Country ten
</div></md-option><md-option ng-repeat="countryType in refData.countryDetails.countryType.Items" ng-value="countryType" tabindex="0" class="ng-scope md-ink-ripple" role="option" aria-selected="false" id="select_option_379" aria-checked="true" value="[object Object]" style=""><div class="md-text ng-binding">
Country eleven
</div></md-option><!-- end ngRepeat: countryType in refData.countryDetails.countryType.Items -->
</md-content></md-select-menu></div>
</md-select>

最佳答案

Material Design Select 和 Cypress

这是与 Access element whose parent is hidden - cypress.io 相同的基本问题,除了这个问题是 angularjs + md-select 而那个问题是 angular + mdc-select。

尽管如此,的两个版本 Material 设计选择在单击它打开选项后,使用相同的技巧使父控件不可见(通过将宽度和高度设置为 0)。

柏树将不允许单击选项,因为它认为选项是不可见的,因为父项是不可见的。

解决方法是使用 .then()访问展开的列表项,并使用 jquery 单击以选择它而不是 柏树点击。

我已经在 Angular 5 设置上对其进行了测试,并且由于问题的相似性,希望它可以与 AngularJS 设置一起使用。

带有 md-select 的 AngularJS

describe('Testing material design select', function() {

it('selects an option by click sequence (fails due to visibility issue)', function() {

const doc = cy.visit('http://localhost:4200');
cy.get('[name="countries"]').click();
cy.get('md-option').contains('Country seven').click();

});

it('selects an option by click sequence', function() {

const doc = cy.visit('http://localhost:4200')
cy.get('[name="countries"]').click()
cy.get('md-option').contains('Country seven').then(option => {

// Confirm have correct option
cy.wrap(option).contains('Country seven');

option[0].click(); // this is jquery click() not cypress click()

// After click, md-select should hold the text of the selected option
cy.get('[name="countries"]').contains('Country seven')
});
});

});

带有 mdc-select 的 Angular 2+

describe('Testing material design select', function() {

it('selects an option by click sequence (fails due to visibility issue)', function() {

const doc = cy.visit('http://localhost:4200');
cy.get('[name="countries"]').click();
cy.get('mdc-select-item').contains('Country seven').click();

});

it('selects an option by click sequence', function() {

const doc = cy.visit('http://localhost:4200')
cy.get('[name="countries"]').click()
cy.get('mdc-select-item').contains('Country seven').then(option => {

// Confirm have correct option
cy.wrap(option).contains('Country seven');

option[0].click();

// After click, mdc-select should hold the text of the selected option
cy.get('[name="countries"]').contains('Country seven');
});
});

});

关于angularjs - 使用 cypress 选择下拉列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48362422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com