元素在点上不可点击 - 但实际上它点击了
Element is not clickable at point - but it clicks in fact
我的测试失败了:
WebDriverException: Message: unknown error: Element is not clickable at point (1
786, 183). Other element would receive the click: <'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>
但是按钮在测试中确实被点击了 -> 数据被保存了-所以没问题。
我只是不明白为什么它在正确点击时会抛出异常,我该怎么做才能让它通过……很明显它找到了元素并点击了它……我也尝试使用 "wait until element is enabled" 和 "focus"...感谢您的任何建议!
PS:我在div元素中异常添加了字符“'”,否则这里不显示..:)
虽然这样做确实是一种不好的做法,但我建议在您的测试用例周围放置几个 Sleep 1s
关键字,例如:
Sleep 1s
Wait Until Element Is Visible ${UPDATE}
Sleep 1s
Click Element ${UPDATE}
Sleep 1s
只是为了调试并确保驱动程序没有被自身绊倒。 (这是我遇到的问题)
如果这随后起作用并通过,那么您基本上需要等待比激活按钮更长的时间。网页的另一部分是否需要更长的加载时间?如果是这样使用那个。
但是,如果可以的话,请摆脱 Sleep 1s
关键词,因为这确实是一种糟糕的做法。
我正在使用以下方法。
- 找到一个在页面完全加载后可见的元素。
- 得到它的 xpath
使用以下关键字:
Wait Until Keyword Succeeds Page Should Contain Element ${Xpath}
Click Element ${Element}
这将帮助您避免在测试用例中使用 sleeps
。
怎么样:
wait until element is visible ${UPDATE}
mouse down ${UPDATE}
mouse up ${UPDATE}
为我工作了一些奇怪的表演元素..
在某些情况下,Wait Until Element Is Enabled
和 Wait Until Element Is Visible
会 return 为真,但该元素仍然不可点击,因为它是 hidden/overlapped 另一个元素。
我可以在我的应用程序中重现这种情况。我得到的错误是:
ElementClickInterceptedException:
Message: element click intercepted:
Element <button>...</button> is not clickable at point (169, 286). Other element would receive the click: <div></div>
如果不编写外部库,似乎没有任何 "smart" 解决方案。目前,最好的方法是使用这个:
*** 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
理查德的回答很有帮助,但可能并不直接适用于所有人。我必须根据我的用例对其进行自定义 -
Wait Until Keyword Succeeds 5x 10s Click Element XPATH://<add xpath>
这将 运行 测试 5 次,两次失败之间的间隔为 10 秒,绝对消除了在代码中进行任何显式休眠的需要。这两个值都可以更改以更好地满足您的需求。请注意,Wait Until Keyword Succeeds
关键字可以与包括 Input Text
在内的任何操作一起使用,这意味着如果您更改测试用例的每一行以使用它,您可以保证您的测试将通过,而不管网站的响应时间。
我的测试失败了:
WebDriverException: Message: unknown error: Element is not clickable at point (1 786, 183). Other element would receive the click: <'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>
但是按钮在测试中确实被点击了 -> 数据被保存了-所以没问题。 我只是不明白为什么它在正确点击时会抛出异常,我该怎么做才能让它通过……很明显它找到了元素并点击了它……我也尝试使用 "wait until element is enabled" 和 "focus"...感谢您的任何建议! PS:我在div元素中异常添加了字符“'”,否则这里不显示..:)
虽然这样做确实是一种不好的做法,但我建议在您的测试用例周围放置几个 Sleep 1s
关键字,例如:
Sleep 1s
Wait Until Element Is Visible ${UPDATE}
Sleep 1s
Click Element ${UPDATE}
Sleep 1s
只是为了调试并确保驱动程序没有被自身绊倒。 (这是我遇到的问题) 如果这随后起作用并通过,那么您基本上需要等待比激活按钮更长的时间。网页的另一部分是否需要更长的加载时间?如果是这样使用那个。
但是,如果可以的话,请摆脱 Sleep 1s
关键词,因为这确实是一种糟糕的做法。
我正在使用以下方法。
- 找到一个在页面完全加载后可见的元素。
- 得到它的 xpath
使用以下关键字:
Wait Until Keyword Succeeds Page Should Contain Element ${Xpath}
Click Element ${Element}
这将帮助您避免在测试用例中使用 sleeps
。
怎么样:
wait until element is visible ${UPDATE}
mouse down ${UPDATE}
mouse up ${UPDATE}
为我工作了一些奇怪的表演元素..
在某些情况下,Wait Until Element Is Enabled
和 Wait Until Element Is Visible
会 return 为真,但该元素仍然不可点击,因为它是 hidden/overlapped 另一个元素。
我可以在我的应用程序中重现这种情况。我得到的错误是:
ElementClickInterceptedException:
Message: element click intercepted:
Element <button>...</button> is not clickable at point (169, 286). Other element would receive the click: <div></div>
如果不编写外部库,似乎没有任何 "smart" 解决方案。目前,最好的方法是使用这个:
*** 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
理查德的回答很有帮助,但可能并不直接适用于所有人。我必须根据我的用例对其进行自定义 -
Wait Until Keyword Succeeds 5x 10s Click Element XPATH://<add xpath>
这将 运行 测试 5 次,两次失败之间的间隔为 10 秒,绝对消除了在代码中进行任何显式休眠的需要。这两个值都可以更改以更好地满足您的需求。请注意,Wait Until Keyword Succeeds
关键字可以与包括 Input Text
在内的任何操作一起使用,这意味着如果您更改测试用例的每一行以使用它,您可以保证您的测试将通过,而不管网站的响应时间。