8

所以现在我想弄清楚当框架没有名称或ID时如何将焦点切换到Selenium 2中的框架?对于命名框架,我这样做:

driver.SwitchTo().Frame(FrameName);

但什么是没有名字的?有没有人有这方面的经验?

4

5 回答 5

11

driver.switchTo.frame() 被重载以接受帧名称或整数。此 int 是可用帧的基于 0 的索引。第一帧为 0,第二帧为 1,依此类推。

我刚刚使用 java 绑定和 Firefox 对这个 HTML 页面进行了非常快速的测试。

<html>
<frameset rows="50%,50%">
    <frame src="frame_a.htm" />
    <frame src="frame_b.htm" />
</frameset>
</html>

我成功地使用了 driver.switchTo().frame(0); 参考帧a和driver.switchTo().frame(1);访问框架 b。

于 2010-09-10T00:07:18.983 回答
1

您可以使用框架的索引。由于您没有框架的名称和 ID,因此 driver.switchTo().frame(int frameIndex)

于 2010-11-10T22:03:42.650 回答
0

在 selenium 中,如果您知道帧的相对位置,您应该能够使用带有字符串“relative=up”的 selectFrame 命令将其向上移动一个帧,例如selenium.SelectFrame("relative=up");或跳转到顶部帧使用“relative=top”

于 2010-08-24T14:14:48.227 回答
0

您可以只提供 iframe 的 id 而不是 iframe-name。

请看我下面的例子,它对我有用。
在示例中,我切换到页面中的一个 iframe 并单击该 iframe 中的元素,即 "worksheet0" 。

使用代码:

driver.switchTo().frame("topframe");    
    WebElement worksheet0 = driver.findElement(By.xpath("//*@id='reportSelect:Worksheet_lbl']"));               worksheet0.click();             

iframe 的 HTML:

  < iframe id="topframe" height="83px" frameborder="0" width="100%" scrolling="NO" '1331808552380'"="" +="" src="initialize.do?init=header&cacheBuster=" name="topframe" marginheight="0" marginwidth="0">
于 2012-03-15T12:05:00.207 回答
0

除了使用索引(如其他答案所建议的那样),在C#中,您可以通过 tagName 选择 iFrame。我的示例假设页面上只有一个 iFrame。

try
{
    var iFrameElement = Driver.FindElementByTagName("iFrame");
    var driver = Driver.SwitchTo().Frame(this.iFrameElement);    
    var element = driver.FindElement(selector);

    // do what you need with the element
}
finally
{
    // don't forget to switch back to the DefaultContent
    Driver.SwitchTo().DefaultContent();
}

注意:在调用 Driver.SwitchTo().DefaultContent(); 之前,您必须从 IWebElement .Text 或 .Click 获取信息;

我创建了这些扩展方法来帮助

public static IWebDriver SwitchToIFrame(this RemoteWebDriver driver)
{
    // http://computerrecipes.wordpress.com/2012/08/23/selenium-webdriver-interact-with-an-element-inside-an-iframe/
    // http://stackoverflow.com/questions/3549584/selenium-2-switching-focus-to-a-frame-that-has-no-name-id
    var iFrameElement = driver.FindElementByTagName("iFrame");
    return driver.SwitchTo().Frame(iFrameElement);
}

public static void SwitchOutOfIFrame(this IWebDriver driver)
{
    driver.SwitchTo().DefaultContent();
}

使用扩展方法的示例:

public void ClickPrintButton()
{
    var iFrameDriver = Browser.Driver.SwitchToIFrame();
    try
    {
        iFrameDriver.FindElement(By.Id("saveButton")).Click();
    }
    finally
    {
        Browser.Driver.SwitchOutOfIFrame();
    }
}
于 2014-04-02T14:12:56.273 回答