В дополнение к использованию индекса (как и другие ответы предполагают), в C# вы можете выбрать Iframe по имени tagName. В моем примере предполагается, что на странице есть один и только один 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();
}
. Примечание: Вы должны получить информацию от IWebElement .text или .click, например, перед вызовом Driver.SwitchTo() 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();
}
}
Вы можете просто дать идентификатор вашего фрейма вместо IFrame-имя Пожалуйста, смотрите мой ниже Например, это сработало для меня.