【问题标题】:RobotFrameWork: How to click an element that's only sometimes presentedRobotFrameWork:如何单击仅有时出现的元素
【发布时间】:2019-02-12 14:40:43
【问题描述】:

所以有一个网站,有时一个元素会妨碍你,一个弹出窗口的问题。

我想单击该元素并摆脱弹出窗口。

但如果弹出窗口(带有元素)没有出现,我也想继续测试。没有任何干扰。

那么处理这个问题的最佳方法是什么?

你不能只说:

Click Element  newBtn LightGray noIcon

因为你不知道它是否在那里。

【问题讨论】:

    标签: robotframework


    【解决方案1】:

    检查元素是否存在,并且只点击true;将Run Keyword And Return StatusElement Should Be Visible 结合使用:

    ${is visible}=    Run Keyword And Return Status    Element Should Be Visible    your_locator
    Run Keyword If    ${is visible}    Click Element   your_locator
    

    如果元素需要一些时间才能出现,您可以改用Wait Until Element Is Visible

    【讨论】:

      【解决方案2】:

      为了验证定位器的存在,您必须使用带有超时参数的 WAIT UNTIL PAGE CONTAINS ELEMENT。我们必须让 DOM 或网页完成加载(几秒钟),然后才能开始对当前页面进行验证。

       # *you click a link here....*
      ${check_popup}=  Run Keyword and Return Status   Wait Until Page Contains Element    locator    6s
       Run Keyword If      ${check_popup} == 'True'     Click Element  locator
      

      如果你注意到,超时参数是可选的,它有一个默认值,但我将它更改为 6 秒。如果您的网页由于性能或其他原因加载缓慢,那么您需要增加超时时间。尽量不要使用ELEMENT SHOULD BE VISIBLE,因为如果弹出/页面或DOM尚未完全加载,此关键字将失败。

      【讨论】:

      • 如果元素不存在 Wait Until Page Contains Element 将简单地失败 - 测试用例也是如此;它不返回真/假。
      • 是的,如果元素不存在,它将失败。但我在这里担心的是,我们应该等待 DOM 页面准备好或正确加载,然后才能开始在页面上进行验证,这就是为什么这个关键字 Wait Until Page Contains Element 派上用场的原因,因为它的默认等待超时时间为 5-10 秒。但是如果我们使用Element should be Visible,同时页面或DOM仍在加载,那么运行将失败,因为该元素尚不可用。所以它在验证元素的存在之前就失败了。
      • > “我们应该等待 DOM 页面准备就绪” - 这是 SeleniumLibrary 中所有 Wait Until ... 关键字的目的。问题是 OP 的问题是“单击一个仅有时存在的元素” - 在某些情况下它不是;然后 - 案例将在此组合中失败,只是因为在此运行中它没有出现。
      • 好的,我会在我的回答中添加更多解释。它需要一个Run Keyword and Return Status,正如你已经给出的那样。但我的解决方案是与Wait Until Page Contains Element 一起使用,谢谢。
      • 好的,然后我的主要观点是 - 它与其他答案有何不同 - “如果元素需要一些时间才能出现,你可以使用等待元素可见代替。” :)
      猜你喜欢
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      • 2020-01-18
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多