我正在尝试使用ScalaTest和FluentLenium在Play Framework中填充,提交和测试Web表单。看起来它应该非常简单,但我遇到了各种各样的问题。
首先,有问题的网络表单的一部分:
<form class="signin" id="loginform" method="POST" action="/login">
<div class="form-group">
<label for="name">Email Address:</label>
<input type="email" class="form-control" placeholder="Enter Email Address" id="email" name="email" required />
...
这可以从真正的网络浏览器中正常工作。现在当我尝试填写并提交表格时出现问题:
@RunWith(classOf[JUnitRunner])
@SharedDriver(deleteCookies = false)
@SharedDriver(`type` = SharedDriver.SharedType.PER_CLASS)
class TestWebsiteAuthentication extends Specification {
"Application" should {
"login as an administrative user on the web site" in new WithBrowser with GPAuthenticationTestUtility {
browser.goTo(loginURL)
browser.fill("#email").`with`(prerequisiteAccounts.head.userIdentity) must equalTo(OK)
...
在最后一行,我得到一个例外:
[info] x登录网站上的管理用户 [error]'org.fluentlenium.core.action.FillConstructor@1c25c183'不等于'200'(TestWebsiteAuthentication.scala:93) [错误]预计:200 [错误]实际:org.fluentlenium.core.action.FillConstructor@1c25c183
我在这里做错了什么想法?
我已经尝试取出“必须等于(好)”但这只会导致表单在提交时失败 - 遗憾的是,我无法找到有关如何执行此操作的任何文档,所以我'我基本上把它拼凑在一起。对相关文档的指示将不胜感激 - 在Tyrpesafe似乎没有任何完整的东西......只是“戏弄”让你开始,但没有深度。 : - (
答案 0 :(得分:0)
当您编写browser.fill("#email").``with``("x@y.com")
时,您所做的一切就是告诉Fluentlenium编辑模板以在输入标记内添加值属性。
另一方面,OK是HTTP状态代码,因此比较它们自然会产生错误。
当您说您尝试提交表单但失败时,我假设您执行了以下操作:
browser.fill("#email").`with`("x@y.com")
browser.fill("#password").`with`("myPass")
browser.click("#button") // this should submit the form and load the page after login
然后尝试做出如下的断言:
browser.title() must equalTo("next page") // fails because "next page" != "login page"
一个建议是在browser.click
之前尝试这样的事情:
browser.pageSource() must contain("xyz") // this will fail
当上述断言失败时,它会将browser.pageSource()的内容打印到您的终端,并且您将能够看到Fill函数对HTML所做的修改。
就我而言,我发现我的pageSource()现在包含以下内容:
<input type="text" id="email" name="email" value="x@y.com"/>
<input type="password" id="password" name="password"/>
注意第一个输入有value="x@y.com"
,但第二个输入仍为空。事实证明第二个是空的,因为它是类型密码的输入,但是我最终使表单登录工作。
以下列出了您可以查看的内容:
browser.goTo
将不能很好地提交表单(任何人都可以确认?)希望这有帮助