这是我在此处提出的上一个问题的后续措施。
我以前在使用Selenium 2.37.0的Internet Explorer 10中切换窗口时遇到问题。我的C#程序将导航到页面,单击打开链接的按钮,然后尝试导航到新窗口以执行其他任务。我的程序不断失败,我确定这是由于Selenium的窗口句柄造成的。打开新窗口后,窗口句柄(driver.WindowHandles.Count)的数量从1增加到2,正如预期的那样,但是经过一段时间后,窗口句柄的数量又下降到1。
我创建了一个最小的示例网页来重现此问题。只需将以下代码保存到test.aspx桌面上的文件中:
<html xmlns="http://www.w3.org/1999/xhtml" >
<body>
<input id="btn" type="button" value="Link" lang="javascript" onclick="window.open('test.aspx')">
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是我的C#代码(Visual Studio 2010中的控制台项目,称为TestWindowSwitching),打开此页面,单击按钮,并输出一些输出:
using System;
using System.Threading; // Needed for Sleep
using System.Diagnostics; // Needed for Stopwatch
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
namespace TestWindowSwitching
{
class Program
{
static void Main()
{
IWebDriver driver = new InternetExplorerDriver();
driver.Navigate().GoToUrl("C:\\Users\\yourNameHere\\Desktop\\test.aspx");
try { driver.SwitchTo().DefaultContent(); }
catch { Thread.Sleep(10); }
Console.WriteLine("Initial number of window handles: " + driver.WindowHandles.Count);
Stopwatch …Run Code Online (Sandbox Code Playgroud) 在有人问我为什么使用框架之前:在我的工作中,我需要测试一个使用框架的网站。我正在尝试使用 Javascript 从框架中获取一些信息,但我在让框架正常工作时遇到了麻烦。
首先,为了进行实验,我在我的计算机上创建了一个文件test.html. 它加载两个框架:左侧框架包含我编写的另一个测试页 ( test2.html),右侧框架包含一些网页。
<html>
<FRAMESET cols="20%, 80%">
<FRAME name="leftFrame" src="test2.html">
<FRAME name="rightFrame" src="http://www.foxnews.com/">
</FRAMESET>
</html>
Run Code Online (Sandbox Code Playgroud)
这是我的另一个测试页test2.html。它只有一个按钮,单击该按钮时,会提醒您 的长度window.frames。根据我在网上找到的信息,这应该告诉我有多少帧。问题是,结果为零。
<html>
<head>
<script type="text/javascript">
function doSomething() {
alert(window.frames.length);
}
</script>
</head>
<body>
<button type="button" onclick="doSomething();">
Click me
</button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
如何在 JavaScript 中访问框架?我不认为这个问题来自于其中一个帧指向本地文件这一事实?