如何使用 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Python 和 Selenium 在 Chrome 中打开具有不同 URL 的新标签页? [复制]
如何在 NUnit 测试框架上使用 selenium C# 在新的 Chrome 选项卡上打开 url
我可以使用 selenium webdriver 读取浏览器 url 吗?