【问题标题】:Handling two different pages with the same URL处理具有相同 URL 的两个不同页面
【发布时间】:2016-01-16 06:44:12
【问题描述】:

我正在开发一个使用 Selenium 自动登录网站的程序。在某些情况下,如果网站不记得浏览器,它会在将您带到密码页面之前要求您回答一个秘密问题。最初我以为我会使用If 语句来处理这个问题,该语句将当前 URL 与我知道在被定向到秘密问题页面时生成的特定 URL 进行检查。我遇到的问题是秘密问题页面的 URL 和密码页面的 URL 相同。在这种情况下,有没有办法通过 URL 来区分这两个页面,还是我需要找到替代方法?

【问题讨论】:

  • 如果网址完全相同相同,那么您如何区分?
  • 大声笑这就是我想要弄清楚的。我以前从未见过这种情况(但我也从未密切关注过)。认为我可能不走运,但我想在我放弃之前我会在这里尝试。
  • 只做一个 php if 语句并从 url 获取一个变量?来自 url 的变量说 X 将仅在同一页面上生成 X 的视图,如果是 Y,则显示 Y 页面。例如,所有从 index.php 调用。
  • 您必须在仅包含在 secret-question-pare 中的 response-body 中查找关键字或句子
  • 自定义标头、cookie、$_GET、本地存储...等...

标签: php url selenium


【解决方案1】:

如果 URL 完全相同,则不会有任何差异可比较,因此您将无法根据 URL 判断页面内容是什么。

通常有一个页面,一个 URL,显示不同的内容,由 Selenium 看不到的后端代码决定。您需要比较两个页面之间的不同之处,例如只出现在一个页面上的元素。

假设您不关心是否显示密码或秘密问题,您只希望 Selenium 完成登录过程,一个简单的解决方案是使用 if / else 语句检查出现的表单,然后尝试填写现有的表格。

if ($this->isElementPresent($password_form)) {
    // enter the password;
} elseif ($this->isElementPresent($secret_question)) {
    // answer the secret question;
} else {
    throw new Exception('Could not find password form or secret question on the login page. [url]');
}

实际的 form 元素很可能对每个可用于标识的表单都有不同的 ID 或名称,或者密码/秘密答案的输入将具有不同的名称。 (如果一切都失败了,您可以在页面上查找是否输入密码或秘密问题的文字。)

【讨论】:

    【解决方案2】:

    等一下。你都错了。

    在编写测试时,您应该为相同的输入明确定义(预期的)输出/行为。

    所以,在你的情况下,你应该有 2 个测试:

    • 做所有必要的事情让您的应用忘记浏览器(清除 cookie、更改浏览器签名等)并检查您是否获得了“秘密问题”页面
    • 做所有必要的事情以确保您的请求代表一个已知的浏览器并检查您是否在登录页面上

    有点像

    testLogin_unknownBrowser_showsSecretQuestion:
        ->clearCookies
        ->findElement(byId 'secretQuestion')
    
    testLogin_knownBrowser_showsLogin:
        ->setCookies
        ->findElement(byId 'username')
        ->findElement(byId 'password')
    

    此时,如果您的一项测试失败,很容易找出问题所在。

    理想情况下,您不包含任何魔法,并尽可能保持测试清晰。

    您可能希望在 BaseTestCase 中抽象出“登录的所有操作”,并在多种情况下使用它,当您只想登录和测试其他内容而不不断解决“我得到了什么屏幕”问题时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 2012-04-03
      • 1970-01-01
      • 2022-07-31
      • 1970-01-01
      相关资源
      最近更新 更多