我有一个问题,让实习生2等待元素出现。在Intern 1中,我使用wait()设置页面的快速时间段,以等待某个用户操作后出现的元素。对于Intern 2,似乎有setFindTimeout(),它应该总是告诉find()方法等待元素出现。我已经设置了setFindTimeout(),并尝试使用pollUntil来处理这些等待,但是测试仍然失败,错误“元素不可见”。
下面是一个示例测试,它使用与实际测试相同的要求,并正在寻找一个元素Id,该Id在此页面加载后5秒出现。
define([
'intern!object',
'intern/chai!assert',
'require',
'tests/util',
'intern/dojo/node!leadfoot/Command',
'intern/dojo/node!leadfoot/Session',
'intern/dojo/node!leadfoot/helpers/pollUntil'
], function (registerSuite, assert, require, util, Command, Session, pollUntil) {
registerSuite([
{
name: 'testing_find_by_wait',
test_create_form_on_web: function() {
console.log('Create a form with account, number, number and formula fields')
return this.remote
.setFindTimeout(10000)
.setWindowSize(1280, 960)
.get("http://www.kgstew.com/waittest.html")
.then(pollUntil('return document.getElementById("demo")', 10000))
.findById('demo')
.click()
.end()
}
}
]);
});发布于 2014-10-07 22:20:11
谢谢Snover帮我解决了这个问题。
我误解了setFindTimeout()和pollUntil的工作方式。它们都在寻找DOM中存在的元素(以前是这样),但是如果在发出click()命令时元素不可见(即样式为click()),则测试将失败。
我们想要做的是等待元素在某种用户操作之后出现。从greater那里得到了监视element.offsetWidth的想法,使其大于0。
我们在测试套件中创建了以下实用程序。
element_visible_by_class: function(elem) {
return function(elem) {
elem = document.getElementsByClassName(elem);
if (!elem || elem.length == 0) { return null; }
elem = elem[0];
return (elem.offsetWidth > 0 && elem.offsetHeight > 0) ? elem : null;
}
},现在,从任何测试中,我们可以调用.then(pollUntil(util.element_visible_by_class(), ['class_name'], 10000)),它将等待直到页面上可见该元素。
https://stackoverflow.com/questions/26166758
复制相似问题