Phantom JS没有点击按钮但是如果我使用任何其他浏览器它可以工作

时间:2016-10-07 05:31:00

标签: javascript jquery html selenium phantomjs

我想点击自动化中的一个按钮,使用selenium webdriver& Phantom JS。但它没有点击按钮。

HTML代码:

<button id="play" class="next-play"><span>play</span></button>

我试过了:

 @FindBy(css = "#play")
    private WebElement Btnplay;

Btnplay.click();

我也尝试过:

JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", Btnplay);

同样的事情,我尝试使用ID和XPATH但不使用phantomJS。它在我使用任何浏览器时都有效。

我拍了截图运行时间,我发现它没有点击按钮。

当我在控制台中看到错误时,它说无法找到元素 [点击播放后在下一页中] 。所以它似乎可能是点击但不会进入下一页。

注意:网站是使用Html / Css和JS构建的。点击按钮,它只是通过JS更改屏幕。

更新:点击元素并进入下一个屏幕。问题是在下一个屏幕中有4个元素但是当我通过屏幕截图检查时,它在页面上仅显示2个元素。我应该使用元素可见性等待吗?

1 个答案:

答案 0 :(得分:1)

由于您没有提供详细的HTML,我将假设该应用程序也是使用一些AJAX构建的。众所周知,当涉及到AJAX时,很少有事情变得非常重要。

问题和可能的解决方案:

  • 使用@FindBy属性始终不是重型Ajax网页中的首选案例,尤其是Angular。使用driver.findElement()调用
  • 在需要时找到该元素
  • 即使进行driver.findElement(whatever)直接调用,您也希望使用Explicit wait并确保元素状态已准备好接受点击,然后执行点击
  • 您肯定希望使用Firebug或Chrome开发者控制台测试选择器,以确保Selenium不会对您可能已经完成的目标元素以外的其他内容执行点击操作。
  • 在最糟糕的情况下,如果您被迫使用JavascriptExecutor,您需要非常小心。我遇到过应用程序在点击时使用Jquery事件的情况,在这种情况下简单的Javascript点击会背叛你。它将向您显示在UI上按预期完成某些操作,而未触发预期的事件。在这种情况下,您需要确保使用JavascriptExecutor触发事件。一个例子是here

我强烈怀疑最后一种情况就是这种情况,您可能希望在手动执行操作或深入了解应用程序代码时调查UI触发的事件。