如何使用 Selenium 打开带有哈希的 URL?

Posted

技术标签:

【中文标题】如何使用 Selenium 打开带有哈希的 URL?【英文标题】:How to open a URL with a hash using Selenium? 【发布时间】: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 【参考方案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())

【讨论】:

以上是关于如何使用 Selenium 打开带有哈希的 URL?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 IRC URI 方案打开查询窗口?

如何使用 Python 和 Selenium 在 Chrome 中打开具有不同 URL 的新标签页? [复制]

如何在 NUnit 测试框架上使用 selenium C# 在新的 Chrome 选项卡上打开 url

我可以使用 selenium webdriver 读取浏览器 url 吗?

如何使用 selenium 获取带有 javascript 呈现的源代码的 html

在带有 selenium 的 python 中,如何轮换 IP 地址?