【发布时间】:2015-06-05 16:41:35
【问题描述】:
我有这个网站:http://embed.plnkr.co/Bs5iDqtXSSnvye2ORI6k/preview
代码:
var app = angular.module('plunker', []);
var a = new Array(1000);
for (var i = 0; i< 1000; i++) {
a[i] = 'Name' + i;
}
app.controller('MainCtrl', function($scope, $interval) {
$scope.names = a;
$scope.start = function () {
$interval(function () {
$scope.names.pop();
}, 50);
}
});
还有以下规格:
'use strict';
describe('Name list', function () {
it('should get the text of the last name', function () {
browser.driver.get('http://embed.plnkr.co/Bs5iDqtXSSnvye2ORI6k/preview');
browser.switchTo().frame(browser.driver.findElement(protractor.By.tagName('iframe')));
element(by.buttonText('start')).click();
expect(element.all(by.tagName('span)).last().getText()).toBe('Name999');
});
});
还有这个配置:
'use strict';
// An example configuration file.
exports.config = {
baseUrl: 'http://localhost:3000',
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['stale.spec.js']
};
当我运行 Protractor 时,出现以下错误:
StaleElementReferenceError:过时的元素引用:元素不是 附加到页面文档(会话信息:chrome=43.0.2357.81)
(驱动信息:chromedriver=2.15.322455 (ae8db840dac8d0c453355d3d922c91adfb61df8f),平台=Mac OS X 10.10.3 x86_64) (警告:服务器未提供任何堆栈跟踪 信息)命令持续时间或超时:9毫秒对于 有关此错误的文档,请访问: http://seleniumhq.org/exceptions/stale_element_reference.html 构建 信息:版本:'2.45.0',修订:'5017cb8',时间:'2015-02-26 23:59:50' 系统信息:主机:'ITs-MacBook-Pro.local',ip: '129.192.20.150',os.name:'Mac OS X',os.arch:'x86_64',os.version: '10.10.3',java.version:'1.8.0_31' 驱动程序信息: org.openqa.selenium.chrome.ChromeDriver 功能 [{applicationCacheEnabled=false, 可旋转=false, mobileEmulationEnabled=false, 铬={userDataDir=/var/folders/rr/63848xd90yscgwpkfn8srbyh0000gq/T/.org.chromium.Chromium.rarNyX}, 需要HeapSnapshot=true,databaseEnabled=false,handlesAlerts=true, 版本=43.0.2357.81,平台=MAC,browserConnectionEnabled=false, nativeEvents=true,acceptSslCerts=true,locationContextEnabled=true, webStorageEnabled=true,browserName=chrome,takeScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}] 会话 ID: 235ec977a69d98c7f5b75a329e8111b2
这意味着我尝试与之交互的元素(获取元素的文本)不再附加到 DOM。这个例子真的是我的规范简单化。在我的真实规范中真正发生的是我尝试获取元素列表的最后一个元素的文本(由 ng-repeat 生成)。还发生的是模型更新,通过删除表示元素列表的数组的最后一个元素。上面的这个例子只是为了重现错误(每次)。
如果我注释掉这一行:element(by.buttonText('start')).click();,说明规范成功。
【问题讨论】:
标签: webdriver protractor