2

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

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

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

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

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

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

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

我不太确定如何提供示例源代码来帮助说明我想要的东西,以免将问题与无关的细节混淆,但如果人们想要示例源代码,请告诉我,我会尝试掀起某事。

谢谢您的帮助。

4

1 回答 1

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>
于 2012-06-20T11:20:06.640 回答