【问题标题】:How to open a URL with a hash using Selenium?如何使用 Selenium 打开带有哈希的 URL?
【发布时间】:2013-01-29 11:46:21
【问题描述】:

我正在尝试使用 Selenium IDE 测试我的 Backbone.js Web 应用程序。

Selenium 可以打开我的测试用例的初始 URL,只要它位于新的浏览器窗口中——例如open /#/login -- 但它会在尝试打开后续 URL 时超时。

似乎 Selenium 正在侦听一个仅在 URL 哈希更改时未触发的事件。

我想这会在你使用 hashchange + Selenium 的任何时候发生......

【问题讨论】:

  • 我已将此as a bug 提交给 Selenium 团队。
  • 我观察到相同的行为,但尽管出现超时错误,但我的脚本将继续
  • 作为对遇到我类似但不同情况的任何其他人的说明,我无法在 selenium 中加载 URL,例如 https://foo.com#bar。但是,如果哈希后跟正斜杠,Selenium 接受 url 哈希,即https://foo.com#/bar

标签: javascript backbone.js selenium hashchange


【解决方案1】:

在 Selenium IDE 中只需使用“storeEval”命令,例如:

Command = storeEval
Target = window.location.hash='/search/events/birthdays/1' 

storeEval 运行分配给“目标”的 javascript sn-p。 然后你可以做的是,有一个测试用例使用 open(url) 命令打开起始页,其余的用例使用 storeEval 命令更改哈希。

【讨论】:

    【解决方案2】:

    在开发者工具的控制台上运行 -> window.location.hash='#abcde'。它应该在浏览器选项卡中为您更改哈希值。

    通过 Selenium Webdriver 和 Java 执行 javascript:

    ((JavascriptExecutor) driver).executeScript("window.location.hash='#abcde'");
    

    【讨论】:

      【解决方案3】:

      一个简短的更新:我们放弃了尝试使用 Selenium IDE 来编写我们的集成测试,而是使用 Selenium Python bindings 作为 Selenium WebDriver。

      通过这种方法,我们可以导航到一个 URL,然后使用WebDriverWait 来检测 DOM 中的特定变化,例如

      driver = webdriver.Firefox()
      driver.get("/#/login")
      WebDriverWait(driver, 10).until(
          lambda driver: driver.find_element_by_css_selector("form.login").is_displayed())
      

      【讨论】:

        猜你喜欢
        • 2011-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-21
        • 1970-01-01
        相关资源
        最近更新 更多