Selenium WaitDriver不等待元素可点击

Den*_*yba 6 c# ajax selenium-webdriver

当我点击一个按钮时,它会显示一个带有另一个按钮的表单,我想点击其中一个按钮.这是一个视频(真的很短),请观看http://screencast.com/t/zyliSemW1s1

所以我点击"购买门票"按钮就像这样:

button.Click();
Run Code Online (Sandbox Code Playgroud)

然后我等待下一个按钮可点击.

我用下一个代码:

WebDriverWait wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(15));
IWebElement element = wait.Until(ExpectedConditions.ElementToBeClickable(myButton));
Run Code Online (Sandbox Code Playgroud)

之后我点击我等待的按钮:

element.Click();
Run Code Online (Sandbox Code Playgroud)

而且我收到错误:此时元素无法点击.

据我所知,方法ExpectedConditions.ElementToBeClickable()等待2个条件:元素可见,元素启用.

当我在点击第二个按钮之前使用Thread.Sleep(3000)时,代码可以工作并且按钮是可点击的.

我看到类似的问题,解决方案是等待这个按钮的处理程序:Selenium Wait不等待Element可点击

但是,如果我不知道是什么处理它该怎么办?我认为它由jQuery处理,我使用下一个代码等待它停止执行:

var ajaxIsComplete = (bool)
    ((IJavaScriptExecutor)Driver).ExecuteScript("return jQuery.active == 0");
Run Code Online (Sandbox Code Playgroud)

如果它返回"false",我等待并再次检查.

但它仍然无效.

所以现在我的流程是这样的:

  1. 我点击"购买门票"按钮
  2. 我等到jQuery停止执行
  3. 我等到使用ExpectedConditions.ElementToBeClickable()方法可点击元素
  4. 我点击元素,它返回一个不可点击的错误.

请大家告诉我我的流程有什么问题,以及如何正确管理它.

更新:我正在添加按钮的HTML代码:

我点击这个:

<button class="btn btn-warning play-now" name="button" type="submit">Buy Tickets</button>
Run Code Online (Sandbox Code Playgroud)

等待这一个:

<img alt="Credit Card" class="merchant" src="https://numgames-production.s3.amazonaws.com/uploads/merchant/image/21/CC_Offline.png?AWSAccessKeyId=AKIAJ2Q64HPERGHAJJUA&amp;Expires=1470984765&amp;Signature=Qj%2BFSQ3ElctkY6KTMfzp%2FedPjPo%3D">
Run Code Online (Sandbox Code Playgroud)

Vis*_*tap 0

尝试使用 PresenceOfElementLocated,而不是使用 ElementToBeClickable。我认为 DOM 上不存在您期望的元素,因此请首先尝试使用 PresenceOfElementLocated。一旦出现在 DOM 上,就可以使用 ElementToBeClickable。