【问题标题】:Unhandled error "Cannot find context with specified id" using Robot framework使用机器人框架的未处理错误“找不到具有指定 id 的上下文”
【发布时间】:2017-05-16 17:33:15
【问题描述】:

我在使用 Robot 框架和 Selenium2Library 处理 iframe 时遇到问题。它抛出错误:

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 的更多页面,但仅在一次确切的情况下失败 - 但所有 iframe 的 html 代码都是相同的,所以真的不明白为什么它有时会起作用..

很高兴得到任何帮助。

【问题讨论】:

  • ${IFRAME BODY} 代表什么?顾名思义,它听起来像是 iframe 元素或 iframe 内的主体,在这种情况下,我不明白您为什么要尝试将文本输入到 iframe 中(而不是输入元素)。
  • html中的结构是:,元素代表“输入框” ",里面没有其他元素..这就是我尝试输入 元素的原因...正如我所提到的,它在 2 种情况下有效,但在 1 种情况下无效...
  • 当您将文本输入到并非旨在获取文本的内容时,您认为会发生什么?
  • 好吧,显然它将文本输入到正文元素中 - 真的适用于我的 3 个案例中的 2 个(带有 iframe 的页面)......只是其中一个没有,我真的没有知道为什么,因为后面的代码是一样的..
  • 我刚刚在测试脚本上收到了相同的错误消息。在这一行抛出异常:WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH,myxpath))) 与@neliCZka 报告的类似,它有时会挂在这一行上,重复多次,但大多数其他时候,它工作正常。我希望我知道这个错误与“找不到元素”错误或“超时”错误有何不同。

标签: selenium selenium-webdriver automated-tests robotframework selenium2library


【解决方案1】:

这个问题似乎在 chromedriver 中再次出现,最新的一个是:https://bugs.chromium.org/p/chromedriver/issues/detail?id=2198

根据这张票可以通过两种方式修复:

  • 切换到没有此问题的 chromedriver 版本
  • 切换到帧后添加等待

【讨论】:

  • 欢迎来到Stack Overflow!感谢您在帖子中包含相关信息!
【解决方案2】:

所以我不得不改变这样的代码才能在其他框架中工作:

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} 在 Iframe 中仍然是 //body,令人惊讶的是它现在一直在输入文本...... 不幸的是,没有睡眠它就无法工作:(但是有了睡眠它就可以了..

【讨论】:

  • 你做了什么改变?我收到与 puppeteer 针对 Chrome 的相同错误消息,但我这段代码对我来说是一堵文字墙。谢谢!
  • 我真的不知道,我只是添加了隐式等待(睡眠),并在访问 iframe 本身之前点击了 iframe 所在的元素。也有可能是因为chrome驱动的高版本才开始工作的。
猜你喜欢
  • 2018-10-29
  • 2016-05-28
  • 2018-11-01
  • 2017-04-01
  • 2017-07-02
  • 2018-10-20
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
相关资源
最近更新 更多