我正在使用Geb(WebDriver)构建一个测试,该测试需要使用没有提交按钮的表单。从用户的角度来看,它就像在搜索词中键入并在键盘上按下回车键一样简单。
以纯脚本形式使用Geb我可以通过在输入的文本中附加特殊键代码来解决这个问题,如下所示:
import org.openqa.selenium.Keys
$('input[id=myInputField]') << "michael"+Keys.ENTER
工作正常。但是,如果我想使用Geb推荐的页面对象模式(http://www.gebish.org/manual/0.7.1/pages.html#the_page_object_pattern),我看不到我应该做什么。我在EmployeeSearchPage对象的内容部分中定义了什么来复制缺少的searchButton及其“to”对象引用,该引用告诉Geb如何处理结果页面?
class EmployeeSearchPage extends Page {
static url = "http://localhost:8888/directory/"
static at = { title == "Employee Directory" }
static content = {
searchField { $("input[id=myInputField]") }
// THE FOLLOWING BUTTON DOESN'T EXIST IN MY CASE
searchButton(to: EmployeeListPage) { $("input[value='SUBMIT']") }
}
}
我意识到我可以在表单中添加一个提交按钮,我可以用于测试并使用CSS将其定位到用户的视图之外,但为什么我必须使应用程序适应测试?事情应该反过来。
我一直在评估很多Web测试框架,并发现这种类型的表单对其中许多人来说都存在问题 - 至少就他们的文档而言。
有什么想法吗?谢谢!
答案 0 :(得分:6)
您不需要使用js集成来实现您想要的目标。
您还可以在页面类上定义方法,而不仅仅是内容。您可以通过以下方式实现一个可以执行所需操作的提交方法:
class EmployeeSearchPage extends Page {
static url = "http://localhost:8888/directory/"
static at = { title == "Employee Directory" }
static content = {
searchField { $("input[id=myInputField]")
}
void submitForm() {
searchField << Keys.ENTER
browser.page EmployeeSearchResultsPage
}
}
然后使用它:
to EmployeeSearchPage
searchField << 'michael' // searchField = 'michael' would have the same effect
submitForm()
答案 1 :(得分:1)
Geb提供了在浏览器上下文中执行JavaScript的支持,可以找到详细信息here in the Geb documentation。
您可以使用此提交表单,就像您在webapp本身中使用JavaScript提交表单一样。例如,如果您使用的是jQuery,那就简单如下:
js.exec('$("#myForm").submit()')