我的测试失败了:
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>
但按钮确实在测试中点击了 - &gt;数据被保存 - 所以没关系。 我只是不明白为什么它在正确点击时抛出异常,我该怎么办才能让它通过..很明显,它找到了元素并点击了它...我也试着用“等到元素启用“和”焦点“...感谢任何建议! PS:我在异常中为div元素添加了字符“'”,否则这里没有显示.. :))
答案 0 :(得分:0)
虽然这样做非常糟糕,但我建议在测试用例周围添加几个Sleep 1s
个关键字,例如:
Sleep 1s
Wait Until Element Is Visible ${UPDATE}
Sleep 1s
Click Element ${UPDATE}
Sleep 1s
只是为了调试并确保驱动程序不会绊倒自己。 (这是我遇到的问题) 如果这样可以工作并通过,那么您将需要基本等待比处于活动状态的按钮更长的时间。网页的另一部分需要更长时间才能加载吗?如果是这样的话。
但是当你可以的时候,摆脱Sleep 1s
关键词,因为这是非常糟糕的做法。
答案 1 :(得分:0)
我使用以下方法。
使用以下关键字:
Wait Until Keyword Succeeds Page Should Contain Element ${Xpath}
Click Element ${Element}
这有助于您避免在测试用例中使用sleeps
。
答案 2 :(得分:0)
怎么样:
wait until element is visible ${UPDATE}
mouse down ${UPDATE}
mouse up ${UPDATE}
为我工作了一些奇怪的表演元素..
答案 3 :(得分:0)
在某些情况下,java.lang.RuntimeException: Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider: java.lang.IllegalStateException:
******************************************************************************
* The Google Mobile Ads SDK was initialized incorrectly. AdMob publishers *
* should follow the instructions here: to add a valid *
* App ID inside the AndroidManifest. Google Ad Manager publishers should *
* follow instructions here: *
******************************************************************************
at android.app.ActivityThread.installProvider(ActivityThread.java:7192)
at android.app.ActivityThread.installContentProviders(ActivityThread.java:6727)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6618)
at android.app.ActivityThread.access$2000(ActivityThread.java:268)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1995)
at android.os.Handler.dispatchMessage(Handler.java:109)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:7539)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)
Caused by: java.lang.IllegalStateException:
******************************************************************************
* The Google Mobile Ads SDK was initialized incorrectly. AdMob publishers *
* should follow the instructions here: to add a valid *
* App ID inside the AndroidManifest. Google Ad Manager publishers should *
* follow instructions here: *
******************************************************************************
at com.google.android.gms.internal.ads.zzabg.attachInfo(Unknown Source:16)
at com.google.android.gms.ads.MobileAdsInitProvider.attachInfo(Unknown Source:3)
at android.app.ActivityThread.installProvider(ActivityThread.java:7187)
... 10 more
和Wait Until Element Is Enabled
将返回true,但是该元素仍然不可单击,因为它被另一个元素隐藏/重叠。
我可以在我的应用中解决这种情况。我收到的错误是:
Wait Until Element Is Visible
如果不编写外部库,似乎没有任何“智能”解决方案。目前,最好的方法是使用此方法:
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}
答案 4 :(得分:0)
理查德的回答很有帮助,但可能并不直接适用于所有人。我必须根据用例对其进行自定义-
Wait Until Keyword Succeeds 5x 10s Click Element XPATH://<add xpath>
这将在两次故障之间以10s的间隔运行测试5次,从而完全消除了在代码中进行任何显式睡眠的需要。可以更改两个值以更好地满足您的需求。请注意,Wait Until Keyword Succeeds
关键字可以与包括Input Text
在内的任何操作一起使用,这意味着,如果更改测试用例的每一行以使用此关键字,则可以保证测试会通过,而无论网站的响应时间。