【发布时间】:2013-09-04 16:56:48
【问题描述】:
我正在使用 WebdriverIO 和 Mocha/Chai 为我的网站编写一些测试,但是当我这样做时:
it('select application', function(done) {
client
.click('.disciplinetext > table:nth-child(7) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(3) > button:nth-child(1)')
// more stuff
该元素尚不存在(未渲染)。 .click() 不应该在实际尝试单击元素之前隐式等待页面完成加载吗?
如果我在它之前拍下这条线,它会很好:
.waitFor('.disciplinetext > table:nth-child(7) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(3) > button:nth-child(1)',1000)
但我不想在每个.setValue()、.click()、.getText() 或任何其他API command 之前都抛出一个waitFor。我错过了什么吗?
是否有等待整个页面加载的命令,或者在访问元素之前隐式等待的设置?
【问题讨论】:
-
.click"will" 在对元素进行操作之前隐式等待页面加载。这个元素是否通过 ajax 附加到 DOM 中? -
@sircapsalot:不,它在页面加载时的 Ctrl+U 页面源中。
-
可能是本次讨论中的第二条评论 (groups.google.com/forum/#!topic/webdriver/8n55XfpDSGo) 会有所帮助。仅供参考,在 selenium webdriver 的 Java、Python、Ruby 绑定中有一个
implicitWait实现。 -
@Amey 并没有真正帮助他,因为他正在使用 webdriverjs :)
-
@mpen 对于初学者来说,隐式等待不是最佳实践,而且它们在网络自动化场景中不受欢迎。没有理由不使用显式等待。我知道你的问题需要一种隐式等待方法,但相信我,在做了数百小时的这些事情之后,如果你想在回归运行时晚上睡个好觉,你会想要做一些明确的等待你的每个命令.明天我会添加一个答案(现在需要一些 ZZzzZZ)。另外,我们可以对这个公认的答案做些什么吗? :) 与它的相关性为 0。
标签: javascript selenium-webdriver webdriver-io