首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ScalaTest和FluentLenium中填写和测试web表单的正确方法

在ScalaTest和FluentLenium中填写和测试web表单的正确方法
EN

Stack Overflow用户
提问于 2015-04-20 03:39:14
回答 1查看 402关注 0票数 0

我正在尝试使用ScalaTest和FluentLenium在Play框架中填写、提交和测试web表单。它看起来应该是非常简单的,但我有各种各样的问题。

首先,有问题的web表单的一部分:

代码语言:javascript
复制
<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 />
        ...

这在真正的web浏览器中运行得很好。现在,当我尝试填写和提交表单时,问题出现了:

代码语言:javascript
复制
@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)
            ...

在最后一行,我得到了一个异常:

org.fluentlenium.core.action.FillConstructor@1c25c183 x以管理用户身份登录网站错误info不等于' 200‘(TestWebsiteAuthentication.scala:93)错误:200错误实际:info

你知道我哪里做错了吗?

我试过去掉“必须equalTo(OK)”,但这只会导致表单在提交时失败--不幸的是,我还没有找到关于如何做到这一点的任何文档,所以我基本上是一点一点地把它们拼凑起来。如果您能提供相关文档的链接,我们将不胜感激-- Tyrpesafe上似乎没有任何完整的文档...只是让你入门的“引导者”,但没有深度。:-(

EN

回答 1

Stack Overflow用户

发布于 2015-12-11 13:25:23

当您编写browser.fill("#email").``with``("x@y.com")时,您真正要做的就是告诉Fluentlenium编辑模板,以便在输入标记内添加一个值属性。另一方面,OK是一个HTTP状态代码,所以比较它们自然会产生false。

当您说您尝试提交表单但失败时,我假设您做了如下操作:

代码语言:javascript
复制
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

然后尝试做出这样的断言:

代码语言:javascript
复制
browser.title() must equalTo("next page") // fails because "next page" != "login page"

一种建议是在browser.click之前尝试这样的事情

代码语言:javascript
复制
browser.pageSource() must contain("xyz") // this will fail

当上面的断言失败时,它将把browser.pageSource()的内容打印到您的终端,您将能够看到Fill函数对HTML所做的修改。

在我的例子中,我观察到我的pageSource()现在包含以下内容:

代码语言:javascript
复制
<input type="text" id="email" name="email" value="x@y.com"/>
<input type="password" id="password" name="password"/>

注意第一个输入有一个value="x@y.com",但是第二个输入仍然是空的。原来第二个是空的,因为它是一个输入类型为password的输入,但是我最终还是让表单login工作了。

以下是您可以查看的内容列表:

  • 在Spec
  • 中启用了一个数据库,并在其中填充了用户(如果您表单验证连接到数据库,也就是说)
  • 根据我的经验,在测试中多次使用browser.goTo不能很好地处理表单提交(有人可以确认吗?)

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29734897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档