量角器等待 isElementPresent 并单击等待元素失败
Protractor wait for isElementPresent and click on waited element fails
我的端到端测试有问题。有时他们毫无问题地通过了,但三分之二的时候他们失败了。我使用带有以下代码的量角器:
describe('Admin dashboard delete Exports', function () {
it('create export', function () {
browser.get(e2GUrl + '/admin/studies');
ptor.wait(function() {
return ptor.isElementPresent(by.id('export'));
}, 5000, 'wait for study list page to be loaded.');
element(by.id('export')).click();
});
HTML(注意这个元素是可见的,不会被 ng-if 或 ng-show 隐藏):
<ul>
<li data-ng-repeat="study in studies">
<div data-ng-controller="ExportController" class="btn-group">
<a id="export" class="btn btn-small dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fw-icon fw-icon-cloud-download"></i>Export
<span class="caret"></span>
</a>
<ul class="dropdown-menu export-list">
<li class="excel"><a data-ng-click="excel(study.Code)">Export to Excel</a>
</li>
</ul>
</div>
</li>
</ul>
我收到错误:
E2E: Admin dashboard delete Exports create export Message:
NoSuchElementError: No element found using locator: By.id("export")
我发现问题在于:
element
isPresent()
和 isDisplayed()
因此,如果您只等待 isPresent()
,它可以在 html 中找到,但尚未显示。
tricky 如果你只想使用 elm.isDisplayed()
,如果元素不存在,它会崩溃。所以你必须先检查 isPresent()
在 isDisplayed()
之前
我创建了一个等待阻塞 2 个属性的函数:
this.waitUntilReady = function (elm) {
browser.wait(function () {
return elm.isPresent();
},10000);
browser.wait(function () {
return elm.isDisplayed();
},10000);
};
describe('Admin dashboard delete Exports', function () {
it('create export', function () {
browser.get(e2GUrl + '/admin/studies');
waitUntilReady(element(by.id('export')));
element(by.id('export')).click();
});
我的端到端测试有问题。有时他们毫无问题地通过了,但三分之二的时候他们失败了。我使用带有以下代码的量角器:
describe('Admin dashboard delete Exports', function () {
it('create export', function () {
browser.get(e2GUrl + '/admin/studies');
ptor.wait(function() {
return ptor.isElementPresent(by.id('export'));
}, 5000, 'wait for study list page to be loaded.');
element(by.id('export')).click();
});
HTML(注意这个元素是可见的,不会被 ng-if 或 ng-show 隐藏):
<ul>
<li data-ng-repeat="study in studies">
<div data-ng-controller="ExportController" class="btn-group">
<a id="export" class="btn btn-small dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fw-icon fw-icon-cloud-download"></i>Export
<span class="caret"></span>
</a>
<ul class="dropdown-menu export-list">
<li class="excel"><a data-ng-click="excel(study.Code)">Export to Excel</a>
</li>
</ul>
</div>
</li>
</ul>
我收到错误:
E2E: Admin dashboard delete Exports create export Message: NoSuchElementError: No element found using locator: By.id("export")
我发现问题在于:
element
isPresent()
和 isDisplayed()
因此,如果您只等待 isPresent()
,它可以在 html 中找到,但尚未显示。
tricky 如果你只想使用 elm.isDisplayed()
,如果元素不存在,它会崩溃。所以你必须先检查 isPresent()
在 isDisplayed()
我创建了一个等待阻塞 2 个属性的函数:
this.waitUntilReady = function (elm) {
browser.wait(function () {
return elm.isPresent();
},10000);
browser.wait(function () {
return elm.isDisplayed();
},10000);
};
describe('Admin dashboard delete Exports', function () {
it('create export', function () {
browser.get(e2GUrl + '/admin/studies');
waitUntilReady(element(by.id('export')));
element(by.id('export')).click();
});