В Selenium webdriver.switchto () «относительный = верх» генерирует ошибку? - PullRequest
2 голосов
/ 16 декабря 2011

Я использую Selenium WebDriver (v2.2), чтобы «переключиться» на «верхнюю» рамку следующим образом:

webdriver.SwitchTo().Frame("relative=top");

Это генерирует сообщение об ошибке:

Unable to locate frame: relative=top

Может ли это быть вызвано тем, что на странице, которую я использую, нет фреймов?

EDIT

К сожалению, оба решения, включающие переключение окон, терпят неудачу:

webdriver.SwitchTo().Window(winHandle);
webdriver.SwitchTo().DefaultContent();

Строго говоря, на самом деле они не терпят неудачу. Но вот в чем проблема: допустим, я извлекаю IWebElement в кадре. Вот как примерно выглядит код:

descend-into-the-frame
grab-the-element
ascend-out-of-the-frame-to-the-top
use-the-element

Когда я использую элемент, я получаю исключение "Элемент не существует в кэше". Это связано с тем, что окно «вознесение за пределы кадра» переключает окно, которое очищает кэш. Довольно раздражает. Я нашел обходной путь, хотя:

ascend-out-of-the-frame-to-the-top
descend-into-the-frame
grab-the-element
use-the-element

Это все еще означает, что я должен следить за ситуациями, когда элемент не в кеше. Но, по крайней мере, пока я использую элемент сразу после его извлечения, я в порядке.

Спасибо за помощь всем!

Ответы [ 3 ]

11 голосов
/ 16 декабря 2011

Для переключения верхней рамки с какой-либо другой рамки вы можете использовать:

driver.switchTo().defaultContent();
3 голосов
/ 16 декабря 2011

Я полагаю, что вы Selenium IDE дали вам этот код, когда вы переключались с одного кадра на другой.Я сохранил дескриптор родительского окна, чтобы вы могли вернуться к нему позже.

String _whandle = driver.getWindowHandle();
...
driver.switchTo().window(whandle);
driver.switchTo().frame("frameA");
driver.findElement(By.id("buttonA")).click();
driver.switchTo().window(whandle);
driver.switchTo().frame("frameB");
driver.findElement(By.id("buttonB")).click();
3 голосов
/ 16 декабря 2011

Да. Вы должны только SwitchTo (). Frame (), когда фрейм существует.

Вы можете обойти это с помощью следующего:

try
{
    webdriver.SwitchTo().Frame("relative=top");
}
catch (WebDriverException ex) 
{
    // do something, perhaps log that there is no frame
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...