【发布时间】:2014-01-21 02:45:24
【问题描述】:
我正在尝试通过测试重新创建一个奇怪的错误。我知道是什么导致了这个错误以及如何修复它,但我不知道如何正确测试它。
场景:
- 我的浏览器在http://example.com/foo
- 我单击该页面上带有 href="/foo" 的链接(同一页面)
- 浏览器应该重新加载相同的页面
我试过了:
class SamePageHyperlinkSpec extends StatelessUserWebGebSpec {
def 'users is on Foo page and clicks foo link'() {
when:
to FooPage
then:
// navigation.foo is a property in a super class that references
// a particular navigation item
navigation.foo.click()
and:
at FooPage
}
}
...但这给出了误报,因为尽管浏览器没有重新加载页面,但它已经在该页面上。所以,我想我会看看 PageChangeListener 应该允许我通过/失败页面更改:
class SamePageHyperlinkSpec extends StatelessUserWebGebSpec {
def 'users is on Foo page and clicks foo link'() {
given:
def listener = new MyPageChangeListener()
browser.registerPageChangeListener(listener)
when:
to FooPage
and:
listener.changeCount = 0
then:
// navigation.foo is a property in a super class that references
// a particular navigation item
navigation.foo.click()
and:
at FooPage
and:
listener.changeCount == 1
}
}
class MyPageChangeListener implements PageChangeListener {
int changeCount = 0
void pageWillChange(Browser browser, Page oldPage, Page newPage) {
println "browser '$browser' changing page from '$oldPage' to '$newPage'"
changeCount++
}
}
...当没有页面重新加载时失败(应该如此),但是当页面重新加载时它也会失败,因为它最终到达的页面是相同的,所以没有页面 change 发生了。
我还尝试复制 Page 类(它是“at”闭包),但是无论是否重新加载页面,它总是通过。
那么,当我单击指向当前页面的链接时,如何测试页面是否已重新加载?
【问题讨论】:
-
重新加载时页面有什么变化吗?例如字段或元素可见等?
-
@PaulHarris Nope, nada
-
我正在尝试除此之外的其他东西,但它会起作用....基本上你可以使用可以将你的驱动程序转换为 JavascriptExecutor 然后执行一些 Javascript 来向页面添加一个元素。然后您可以重新加载,您将知道它已完成,因为您刚刚添加的元素将消失。必须有更好的方法,但我现在的想法出奇地白痴。
标签: selenium functional-testing spock geb