【问题标题】:cross domain selenium test -- how to track the browser URL?跨域 selenium 测试——如何跟踪浏览器 URL?
【发布时间】:2012-06-18 23:43:02
【问题描述】:

我使用 Selenium 和 Capybara 维护了一个测试套件。虽然我可以说服 Selenium 访问我的主域之外的页面,但 Capybara 似乎无法跟踪浏览器地址栏中的 URL。我将此缺陷归结为 Selenium::WebDriver 中的行为,这是 Ruby 与 Selenium 2 的绑定。

谷歌搜索,看起来 Selenium 似乎有一种您可以设置的模式,它可以实现跨域操作。但是,我没有找到任何具体的参考。

StackOverflow 上的一些人谈论使用具有“提升权限”的 Chrome 或 Firefox,但同样,我只是没有找到任何有关使用此类功能的信息。不可避免地,这些问题最终没有答案。

还有其他流行的 SO 建议谈到使用“打开”命令显式地将浏览器带到新站点。这是不可接受的,原因很明显,用户通常不键入域名。例如,如果我访问 youtube.com,并在描述下方找到我喜欢的带有 Twitter 图标的视频,那么单击该 Twitter 按钮应该会将我引导至适当的 twitter.com 地址。用户不必手动输入 Twitter 地址。使用 selenium 的 open 命令破坏了测试,因为测试不再反映用户行为(它模拟某人在栏中实际输入地址),从而破坏了测试的意图,即确认 twitter 按钮是否实际上按预期工作。

我开始相信真正的自动化跨域操作是不可能的。

所以,基本上,我有两个问题:

(1) 给定一个在“www.example.com”上打开 Selenium 的测试脚本,并且我要求 Selenium 单击将浏览器指向其他位置的链接,是否 = 可能 = 以某种方式捕获 URL点击成功后浏览器的地址栏读取? (2) 知道这是可能的,=how= 我该怎么做?我根本没有找到任何有关此的信息。如果我阅读 @session.driver.browser.current_url,它仍然会报告 example.com 上的 URL,而不是浏览器的当前 URL。

我不太确定如何提供示例源代码来帮助说明我想要的内容,以免将问题与无关的细节混淆,但如果人们想要示例源代码,请告诉我,我'll试图鞭打。

感谢您的帮助。

【问题讨论】:

    标签: url selenium cross-domain capybara capture


    【解决方案1】:

    使用

    selenium.click("some redirect link");
    selenium.waitforpagetoload("30000"); //page load time
    string url=selenium.getlocation(); //storing the url in a string.
    

    如果这没有帮助,请发布示例代码链接到您正在执行此测试的网页

    我不知道如何在 Ruby 中做到这一点。但我将发布此测试的 HTML 代码。因此,您将此代码粘贴到您的 Selenium IDE 中,并将其导出为 Ruby任何您喜欢的语言

    HTML 代码

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head profile="http://selenium-ide.openqa.org/profiles/test-case">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link rel="selenium.base" href="http://www.google.co.in/" />
    <title>New Test</title>
    </head>
    <body>
    <table cellpadding="1" cellspacing="1" border="1">
    <thead>
    <tr><td rowspan="1" colspan="3">New Test</td></tr>
    </thead><tbody>
    <tr>
    <td>open</td>
    <td>youtube</td>
    <td></td>
    </tr>
    <tr>
    <td>clickAndWait</td>
    <td>id=redirect_link</td>
    <td></td>
    </tr>
    <tr>
    <td>verifyLocation</td>
    <td>resultant_page_URL</td>
    <td></td>
    </tr>
    </tbody></table>
    </body>
    </html>
    

    【讨论】:

    • 嗨兰努!感谢您的反馈意见。不幸的是,您的解决方案不起作用,因为在 Ruby 的 Selenium::WebDriver 中实现的 API 似乎不完整——它没有提供像 getLocation() 这样的东西。但是,我发现我认为是一种可用的解决方法——我要求 Web 驱动程序在 Javascript 中评估“document.URL”并返回字符串。也许不出所料,这也返回任何查询字符串,实际上它比普通 URL 对我来说甚至更多有用!谢谢您的答复!这只是我需要的灵感。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 2014-04-28
    • 2019-05-02
    相关资源
    最近更新 更多