Необработанная ошибка. Не удается найти контекст с указанным идентификатором с помощью платформы Robot.

У меня проблема при работе с iframe с использованием Robot framework и Selenium2Library. Выдает ошибку:

WebDriverException: Message: unknown error: unhandled inspector error: {"code":-
32000,"message":"Cannot find context with specified id"}
(Session info: chrome=55.0.2883.87)
  (Driver info: chromedriver=2.25.426923 (0390b88869384d6eb0d5d09729679f934aab9eed),platform=Windows NT 6.1.7601 SP1 x86_64)

Мой тестовый код:

Fill In Description ${description}
    Wait Until Element Is Visible    ${FRAME}    40
    Select Frame    ${FRAME}
    wait until page contains element  ${IFRAME BODY}
    Click Element    ${IFRAME BODY}
    wait until page contains element  ${IFRAME BODY}
    Clear Element Text    ${IFRAME BODY}
    wait until page contains element  ${IFRAME BODY}
    Input Text    ${IFRAME BODY}     ${description}
    Unselect Frame

Ошибка на шаге Input Text ${IFRAME BODY} ${description}

Кстати, я повторно использую это ключевое слово для большего количества страниц, на которых встречается этот iframe, но он терпит неудачу только в одном точном случае, но html-код одинаков для всех iframe, поэтому действительно не понимаю, почему он работает только иногда.

Будем рады любой помощи.


person neliCZka    schedule 02.01.2017    source источник
comment
что означает ${IFRAME BODY}? По названию это звучит как элемент iframe или тело внутри iframe, и в этом случае я не понимаю, почему вы пытаетесь ввести текст в iframe (по сравнению с элементом ввода).   -  person Bryan Oakley    schedule 02.01.2017
comment
Структура в html: ‹iframe›‹html›‹body›‹/body›‹/html›‹/iframe›, а элемент ‹body› — это тот, который обозначает поле ввода, внутри нет другого элемента.. вот почему я пытаюсь ввести в элемент ‹body›... и, как я уже упоминал, это работает в 2 случаях, но не работает в 1 случае...   -  person neliCZka    schedule 02.01.2017
comment
как вы думаете, что должно произойти, когда вы вводите текст во что-то, что не предназначено для приема текста?   -  person Bryan Oakley    schedule 02.01.2017
comment
ну, очевидно, он вводит текст в элемент body - действительно работает в 2 из 3 моих случаев (страницы с фреймами) ... только в одном это не так, и я действительно не знаю, почему, потому что за этим стоит код то же..   -  person neliCZka    schedule 02.01.2017
comment
У меня только что было такое же сообщение об ошибке в тестовом сценарии. Исключение выдается в этой строке: WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH,myxpath))) Подобно тому, что сообщает @neliCZka, иногда оно зависает на этой строке, которая повторяется несколько раз, но в большинстве других случаев все работает нормально. Хотел бы я знать, чем эта ошибка отличается от, скажем, ошибки «элемент не найден» или ошибки тайм-аута.   -  person Suzanne    schedule 04.01.2017
comment
Вы видите ту же проблему при использовании другого браузера? Просто чтобы сузить поиск решения?   -  person A. Kootstra    schedule 08.01.2017
comment
Я почти уверен, что это сообщение об ошибке генерируется Chrome, а не Selenium или Robot. . У меня такая же проблема с puppeteer + Chrome, поэтому было бы неплохо получить общий ответ, отличный от Selenium.   -  person jpaugh    schedule 06.01.2018


Ответы (2)


Эта проблема, похоже, снова возникает в chromedriver, последняя из них: https://bugs.chromium.org/p/chromedriver/issues/detail?id=2198

По данному билету можно закрепить двумя способами:

  • переключитесь на версию chromedriver, в которой нет этой проблемы
  • добавить ожидание после переключения на кадр
person James Windshield    schedule 08.01.2018
comment
Добро пожаловать в Переполнение стека! Спасибо, что включили нужную информацию в свой пост! - person jpaugh; 08.01.2018

Поэтому мне пришлось изменить такой код, чтобы он работал в другом фрейме:

Log comment ${comment}
   wait until element is visible    ${RICH TEXT AREA}    40
   sleep   1
   click element    ${RICH TEXT AREA}
   Wait Until Element Is Visible    ${FRAME}    40
   Select Frame    ${FRAME}
   wait until element is visible    ${IFRAME BODY}   20
   input text   ${IFRAME BODY}   ${comment}
   Unselect Frame

${IFRAME BODY} по-прежнему //body в Iframe и на удивление теперь постоянно вводит текст... И, к сожалению, без сна не работает :( Но со сном работает..

person neliCZka    schedule 12.01.2017
comment
Какое изменение вы внесли? Я получаю то же сообщение об ошибке с puppeteer против Chrome, но этот код представляет собой стену текста мне. Спасибо! - person jpaugh; 06.01.2018
comment
Я действительно не знаю, я просто добавил неявное ожидание (сон) и сделал несколько щелчков по элементу, в котором существует iframe, прежде чем получить доступ к самому iframe. Также возможно, что он начал работать из-за более высокой версии драйвера Chrome. - person neliCZka; 08.01.2018