所以现在我想弄清楚当帧没有名字或id时我如何将焦点切换到Selenium 2中的帧?对于命名框架我做:
driver.SwitchTo().Frame(FrameName);
但是什么没有名字?有没有人有这方面的经验?
答案 0 :(得分:11)
driver.switchTo.frame()是overloaded to accept a frame name or an integer。此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()框架(1);访问框架b。
答案 1 :(得分:1)
您可以使用框架的索引。由于您没有框架的名称和ID, driver.switchTo()。frame(int frameIndex)
答案 2 :(得分:0)
在selenium中如果您知道帧的相对位置,您应该能够使用带有字符串“relative = up”的selectFrame命令将其向上移动一帧,例如selenium.SelectFrame("relative=up");
或跳转到顶部框架使用“relative = top”
答案 3 :(得分: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">
答案 4 :(得分: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()之前,您必须从IWebElement .Text或.Click获取信息.DefaultContent();
我创建了这些扩展方法来帮助
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();
}
}