跨域硒测试 - 如何跟踪浏览器URL?

时间:2012-06-18 23:43:02

标签: url selenium cross-domain capybara capture

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

在Google上搜索,看起来Selenium似乎是一种可以设置的模式,可以实现跨域操作。但是,我发现没有任何具体的参考。

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

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

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

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

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

我不太确定如何提供示例源代码以帮助说明我想要的方式,不会将问题与不相关的细节混淆,但如果大家想要示例源代码,请告诉我,我我会尝试鞭打一些东西。

感谢您的帮助。

1 个答案:

答案 0 :(得分: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>