3

我的测试失败了:

WebDriverException:消息:未知错误:元素在点 (1 786、183) 处不可点击。其他元素会收到点击:<'div align="right">...</'/div>

我访问的 xpath 是:

${UPDATE}    xpath=//button[@type='submit' and contains(text(),'Update')]

在关键字中使用:

    wait until element is visible   ${UPDATE}
    click element    ${UPDATE}

资源:

<div align="right">
    <button type="submit" class="btn btn-primary ng-binding" ng-click="submitForm()" ng-disabled="updateDisabled">Update</button>
    <button type="button" class="btn btn-primary" ng-click="reset(projectForm)" ng-disabled="updateDisabled">Reset</button>
</div>

但是按钮在测试中真的被点击了->数据被保存了-所以就OK了。我只是不明白为什么它在正确单击时会引发异常以及我该怎么做才能使其通过..很明显它找到了该元素并单击了它...我还尝试使用“等到元素已启用”和“焦点”...感谢您的任何建议!PS:我在异常中为div元素添加了字符“'”,否则这里不显示..:)

4

5 回答 5

1

尽管这样做确实是不好的做法,但我建议Sleep 1s您在测试用例周围放置几个关键字,例如:

Sleep    1s
Wait Until Element Is Visible   ${UPDATE}
Sleep    1s
Click Element    ${UPDATE}
Sleep    1s

只是为了调试并确保驱动程序不会自己绊倒。(这是我遇到的问题)如果这可以正常工作并通过,那么您基本上需要等待比按钮处于活动状态的时间更长。网页的其他部分是否需要更长的时间才能加载?如果是这样使用它。

但是,如果可以,请摆脱Sleep 1s关键字,因为这确实是一种不好的做法。

于 2016-12-09T09:11:57.467 回答
0

怎么样: wait until element is visible ${UPDATE} mouse down ${UPDATE} mouse up ${UPDATE}

为我工作了一些奇怪的表演元素..

于 2016-12-16T06:37:44.760 回答
0

在某些情况下,当Wait Until Element Is Enabled并且Wait Until Element Is Visible将返回 true 但该元素仍然不可点击,因为它被另一个元素隐藏/重叠。

我可以在我的应用程序中重现这种情况。我得到的一个错误是:

ElementClickInterceptedException:
Message: element click intercepted:
Element <button>...</button> is not clickable at point (169, 286). Other element would receive the click: <div></div>

如果不编写外部库,似乎没有任何“智能”解决方案。目前,最好的方法是使用这个:

*** Keywords ***
Click Element Wait
    [Arguments]    ${locator}=required    ${timeout}=2    ${mustWait}=False
    Wait Until Element Is Visible    ${locator}    ${timeout}
    Wait Until Element Is Enabled    ${locator}    ${timeout}
    Run Keyword If    $mustWait == True    Sleep    1s
    Click Element    ${locator}

像这样使用它:

Click Element Wait    myButton    4    True    # Wait until element is visible & enabled, then another 1 second as well
Click Element Wait    myButton    # Just wait until element is visible & enabled
于 2019-05-22T10:46:34.417 回答
0

我正在使用以下方法。

  1. 位于页面完全加载后可见的元素。
  2. 得到它的xpath

使用以下关键字:

Wait Until Keyword Succeeds  Page Should Contain Element  ${Xpath}
Click Element  ${Element}

这将帮助您避免sleeps在测试用例中使用。

于 2016-12-09T11:51:10.860 回答
0

理查德的回答非常有帮助,但可能并不直接适用于所有人。我必须根据我的用例对其进行自定义 -

Wait Until Keyword Succeeds      5x     10s      Click Element   XPATH://<add xpath>

这将运行测试 5 次,两次失败之间的间隔为 10 秒,完全消除了在代码中进行任何显式休眠的需要。这两个值都可以更改以更好地满足您的需要。请注意,Wait Until Keyword Succeeds关键字可以与任何操作一起使用,包括Input Text这意味着如果您更改测试用例的每一行以使用它,您可以保证您的测试将通过,而不管网站响应时间的变化。

于 2020-07-03T12:53:46.850 回答