Selenium 2 - переключение фокуса на кадр, у которого нет имени / идентификатора - PullRequest
8 голосов
/ 23 августа 2010

Итак, сейчас я пытаюсь выяснить, как я могу переключить фокус на кадр в Selenium 2, когда у кадра нет имени или идентификатора?Для именованного фрейма я делаю:

driver.SwitchTo().Frame(FrameName);

но чего там имени нет?У кого-нибудь был опыт с этим?

Ответы [ 5 ]

11 голосов
/ 10 сентября 2010

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); сослаться на кадр а и . Driver.switchTo () рамы (1); чтобы получить доступ к кадру б.

1 голос
/ 11 ноября 2010

Вы можете использовать индекс кадра. Поскольку у вас нет имени и идентификатора для кадра, driver.switchTo (). frame (int frameIndex)

0 голосов
/ 02 апреля 2014

Помимо использования индекса (как предлагают другие ответы), в 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();
}

Примечание. Прежде чем вызывать Driver.SwitchTo (), необходимо получить информацию из IWebElement.DefaultContent ();

Я создал эти методы расширений, чтобы помочь

public static IWebDriver SwitchToIFrame(this RemoteWebDriver driver)
{
    // http://computerrecipes.wordpress.com/2012/08/23/selenium-webdriver-interact-with-an-element-inside-an-iframe/
    // /3184214/selenium-2-pereklychenie-fokusa-na-kadr-u-kotorogo-net-imeni-identifikatora
    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();
    }
}
0 голосов
/ 15 марта 2012

Вы можете просто указать идентификатор вашего iframe вместо iframe-name.

Пожалуйста, смотрите мой пример ниже, он работал для меня.
В этом примере я переключаюсь на один iframe на своей странице и нажимаю на элемент в этом iframe, который называется «worksheet0».

Используйте код:

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

HTML-код iframe:

  < iframe id="topframe" height="83px" frameborder="0" width="100%" scrolling="NO" '1331808552380'"="" +="" src="initialize.do?init=header&cacheBuster=" name="topframe" marginheight="0" marginwidth="0">
0 голосов
/ 24 августа 2010

В селене, если вы знаете, что относительное местоположение фрейма, вы должны иметь возможность использовать команду selectFrame со строкой «относительный = вверх», чтобы переместить его на фрейм, например, selenium.SelectFrame("relative=up"); или перейти к верхнему фрейму."относительной = сверху"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...