HTMLUnit:确定“登录”是否成功

时间:2013-08-28 23:23:14

标签: java web login logic htmlunit

我开发了一个脚本,其唯一目的是检查网站/服务是否正常运行。它的方式是,它使用其URL连接到页面并使用用户凭据登录到站点。如果登录成功,则服务正常运行。

此脚本是用Java编写的,并使用HTMLUnit。这就是我的问题。 如何确保登录后返回的HTML页面(填写表单后单击登录/登录按钮)是登录后的“帐户主页”。换句话说,我如何确定登录操作是否成功。

以下是我现在正在做的事情。帐户页面通常包含一些用户相关信息。例如,如果我登录到雅虎邮件,它将在页面的右上角有“欢迎,用户名”或页面上总是有“撰写”或“收件箱”。我正在使用这种逻辑来测试成功。

这是我在测试此脚本时的观察结果。我遇到过这个规则崩溃的情况。

  • 有些时候,登录后返回的页面是一个错误页面,要求您使用 检查您输入的凭据。

  • 有时返回的页面可能会要求您打开您的javascript或
    在浏览器中启用cookie。

  • 我遇到过服务器返回页面的情况 相同的登录前页面(没有解释原因)

  • 有些网页本质上是动态的,因此内容会发生变化 时。在这种情况下,关键词搜索可能导致错误 这就是为什么这种搜索字符串存在的逻辑取决于 纯粹是选择“搜索字符串/关键字”。

我想说的是,预先编写这些案例是不现实的。

我尝试比较登录前和登录后页面的网址但发现了 有很多情况都是相同的。即使这种方法也没有定论。

我需要一种确定登录是否成功的确定方法。我不是一个专业的网络开发人员。服务器是否返回具有新页面的任何状态代码,可以解决? HTMLUnit是否具备测试成功和失败的能力。

感谢您的帮助/评论。谢谢!

1 个答案:

答案 0 :(得分:1)

嗯......这是一个棘手的问题。这是因为您无法控制服务器。我问你A你可能会收到A但是你应该准备接受B,C和D ......你可能会错过E。

  

我需要一种确定登录是否成功的确定方法。

根据您的评论,查找“欢迎<用户名>”字符串应该是相当肯定的射击。在其他(更多程序化的)单词中,如果您在结果页面中有该字符串,那么您就已登录。确实无误。

现在,您已经提到过在某些情况下您尝试登录并且您没有收到该字符串。在这些情况下,根据您的示例,您几乎总是不应该登录。

但是,正如您所说,他们可以从“欢迎,<用户名>”更改该字符串到“你又来了!”你将得到假阴性。但是,你不可能在应用这种逻辑时得到误报。

那么,有没有办法在猜测用户是否登录时100%成功,并且在猜测用户是否未登录时也能100%成功?不,没有。理解这一点的最简单方法是以类似人的方式使用网络:

情景1:

  1. 尝试登录
  2. 您会看到一个红色标签,上面写着“用户和密码不正确”
  3. 你推断你没有登录。你是对的
  4. 情景2:

    1. 尝试登录
    2. 您会看到“欢迎<用户名>”
    3. 您推断您已登录。您说得对。
    4. 情景3:

      1. 尝试登录
      2. 您会收到“启用javascript”消息
      3. 你推断你没有登录。但是,这恰好只是来自服务器的建议,你实际登录了。你刷新页面,然后你看到“欢迎。所以这里你甚至作为一个人失败了
      4. 情景4:

        1. 尝试登录
        2. 你得到超时
        3. 你推断你没有登录。但是,登录请求到达服务器登录你,当服务器用HtmlPage回复你的互联网连接,ISP,或只是互联网打破了下降一毫秒,你的数据包丢失了。所以在这里你甚至失败了作为一个人
        4. 这些只是一些场景,但还有更多。现在想一想:即使是人头也不能100%确定登录试用的结果......我们怎么能期望无头浏览器? :)