Как переключиться на кадр, который отображается как всплывающее окно - PullRequest
2 голосов
/ 19 марта 2012

Я использую следующие приложения:

  • Селен 2.0 в C #
  • Firefox

Мне нужно написать тест, который нажимает кнопку и открывает окно в виде всплывающего окна. У рамки нет ни имени, ни идентификатора.

Исходный код во фрейме начинается с «html» вместо «frame». Однако, когда вы щелкаете правой кнопкой мыши по окну, оно показывает, что это фрейм. Итак, я думаю, что это рамка вместо окна.

Я пробовал следующий код, но не работает:

  • driver.SwitchTo (). Рама (0)

Ошибка, которую я получаю, выглядит следующим образом:

ошибка: нет ответа от сервера для URL http://localhost:7055/hub/session/126a4485-48cb-4230-b0b0-69c4169b1852/element/%7B706f4a88-56a7-4813-af1b-8e137ce676af%7D/click

Пожалуйста, помогите.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 07 апреля 2013

Ответ прост.Прежде всего, iframe или фрейм не могут «отображаться как всплывающее окно».Что вы, вероятно, имеете в виду, что отдельное всплывающее окно открывается со своим собственным дескриптором окна, и у него есть собственный встроенный iframe?Если это так, просто используйте driver.switchTo.window (handle), прежде чем пытаться получить доступ к его кадру с помощью ДРУГОГО вызова driver.switchTo.frame (0).Далее следует driver.findElement (By) и все, что вам нужно для действия.

void switchToPopupWithClickAndClose() {
    driver.switchTo.window( handle );
    driver.switchTo.frame(0);
    driver.findElement(By.id("elId") ).click();

    if ( driver.getWindowHandles().size() > 1 ) {//popup still open
       driver.switchTo.defaultContent();
       driver.close();
       driver.switchTo().defaultContent();// switch to default content of 
                                      // original window
    }
}
0 голосов
/ 10 апреля 2017

Это старый пост, но он все еще действителен для меня, потому что я застрял и без всплывающей рамки.Проблема в том, что после появления всплывающего окна я считаю количество окон:

int windows = driver.WindowHandles.Count();

до и после всплывающего окна количество окон равно 1.

Количество кадров:

int totalframes = driver.FindElements(By.TagName("iframe")).Count();

- это 2 до и после всплывающего окна.Таким образом, это выглядит так, как будто фрейм уже есть, на странице, только скрытый, пока не сработает.Всплывающее окно отображается в виде отдельного окна (где вы выбираете тип файла, в который вы хотите экспортировать отчет).Я не могу добраться до элементов в этом новом окне, однако я пытаюсь переключаться между кадрами.

0 голосов
/ 19 июня 2012

Попробуйте этот синтаксис, возможно, не правильно, но попробуйте эту логику.

 WebElement MyFrame =  driver.FindElement(By.Id("frame"));
 driver.SwitchTo().Frame(MyFrame)

Это было полезно для меня в Java.

Спасибо.

...