【发布时间】:2015-08-12 07:17:05
【问题描述】:
当我点击一个按钮时,它会显示一个带有其他按钮的表单,我想点击其中一个。这是一个视频(真的很短),请观看http://screencast.com/t/zyliSemW1s1
所以我就这样点击了“买票”按钮:
button.Click();
然后我等待下一个按钮可以点击。
我使用下一个代码:
WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(15));
IWebElement element = wait.Until(ExpectedConditions.ElementToBeClickable(myButton));
然后我点击我等待的按钮:
element.Click();
我得到错误:此时元素不可点击。
据我所知,ExpectedConditions.ElementToBeClickable() 方法等待两个条件:元素可见且元素已启用。
当我在单击第二个按钮之前使用 Thread.Sleep(3000) 时,代码有效并且按钮是可点击的。
我看到了类似的问题,解决方法是等待这个按钮的处理程序:Selenium Wait doesn't wait for Element to be Clickable
但是如果我不知道如何处理它怎么办?我认为它由 jQuery 处理,我使用下一个代码等到它停止执行:
var ajaxIsComplete = (bool)
((IJavaScriptExecutor)Driver).ExecuteScript("return jQuery.active == 0");
如果它返回“false”,我会等待并再次检查。
但还是不行。
所以现在我的流程是这样的:
- 我点击“买票”按钮
- 我等到 jQuery 停止执行
- 我等到元素可以使用 ExpectedConditions.ElementToBeClickable() 方法点击
- 我单击该元素,它返回一个错误,指出它不可单击。
请大家告诉我我的流程出了什么问题以及如何正确管理它。
更新: 我正在添加按钮的 HTML 代码:
我点击这个:
<button class="btn btn-warning play-now" name="button" type="submit">Buy Tickets</button>
然后等待这个:
<img alt="Credit Card" class="merchant" src="https://numgames-production.s3.amazonaws.com/uploads/merchant/image/21/CC_Offline.png?AWSAccessKeyId=AKIAJ2Q64HPERGHAJJUA&Expires=1470984765&Signature=Qj%2BFSQ3ElctkY6KTMfzp%2FedPjPo%3D">
【问题讨论】:
-
你能把这个增加到 30 吗?
WebDriverWait(Driver, TimeSpan.FromSeconds(15));然后试试看。 -
当然我试过了。它不起作用。事实上,我需要 1-2 秒才能完成。但它不会等待它......
-
我知道你不应该使用这种方法:ElementToBeClickable
-
denis,我将添加一些扩展方法,用于在类似于您自己的场景中导航这些波涛汹涌的水域。请注意,这些可能无法形成答案,只是帮助您克服障碍的跳板
-
你能分享按钮的 html 吗?
标签: c# ajax selenium-webdriver