我正在Geb (WebDriver)中构建一个测试,它需要使用一个没有提交按钮的表单。从用户的角度来看,它很容易使用,只需输入搜索词并按键盘上的enter键。
在纯脚本形式中使用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对象的content部分定义什么来复制丢失的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测试框架,发现这种类型的表单给他们中的许多人带来了问题-至少就他们的文档而言是这样。
有什么想法吗?谢谢!
发布于 2013-01-08 21:06:58
你不需要使用js集成来达到你想要的效果。
您还可以在页面类上定义方法,而不仅仅是内容。您可以实现一个submit方法,该方法将通过以下方式完成您想要的操作:
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()发布于 2013-01-08 15:56:32
Geb提供了在浏览器上下文中执行JavaScript的支持,详情可以在here in the Geb documentation中找到。
您可以使用它来提交表单,就像在webapp本身中使用JavaScript提交表单一样。例如,如果您使用的是jQuery,那么它将非常简单:
js.exec('$("#myForm").submit()')https://stackoverflow.com/questions/14201716
复制相似问题