java - Selenium Webdriver click()没有做任何事情

标签 java selenium click webdriver

应该很简单,我有以下代码:-

DesiredCapabilities capabilities = new DesiredCapabilities();
DesiredCapabilities.internetExplorer();
capabilities.setCapability("nativeEvents",false);

WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"),capabilities);

// And now use it
driver.get("dvfow01.mySite.com");
Thread.sleep(5000);

driver.findElement(By.linkText("Create")).click();
System.out.println("test");
driver.findElement(By.id("CreateDeal")).click();

它单击了第一个项目(“创建”的链接文本),但从未到达序列中的下一行。在我关闭浏览器的那一刻,它到达下一行,打印出文本“test”,然后显然由于关闭的窗口上没有元素而立即崩溃。

有什么建议吗?我正在运行所有最新版本...

单击此链接会通过 tagit.js 展开一个隐藏部分,因此它看起来像一个下拉菜单,但实际上不是...页面的 html 看起来像这样...

  <li class="dropdown"><a href='#' class='collermenu dropdown-toggle' data-toggle='dropdown'>Create <b class='caret'></b></a>
        <ul class="dropdown-menu">
            <li><a id="createDeal">Deal</a></li>
            <li><a id="second">someting</a></li>
            <li><a id="third">something else</a></li>
            <li><a id="fourth">a fourth</a></li>
            <li><a id="fifth">the last</a></li>
        </ul>
    </li>

我已经和我的开发人员谈过了,他们告诉我他们正在运行一个名为 signalr 的东西,它带有 foreverframe 以不断地与服务器通信以获取更新/弹出窗口等?

有人听说过这个或将它与 selenium 结合使用吗?

最佳答案

It clicks the first item (linkText of "Create") but never gets to the next line in the sequence.

这通常源于应用程序问题。 WebDriver 将等待页面完全加载,我猜它永远不会完全加载。有一个应用程序问题,这可以解释为什么在您关闭它后,它会回显。

我也愿意打赌,如果您等待的时间足够长,Selenium 会吐出一个异常。

我的一个建议是首先清理您的代码..

除非您希望它是专用服务器,否则不要使用集线器。如果您在本地机器上运行测试,只需使用本地 webdriver 实例。

DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability("nativeEvents",false);

WebDriver driver = new IEDriver(capabilities);

driver.get("http://myurl.com");

其次,取出,并 LEAVE out 所有显式等待,如 Thread.sleep() . Selenium 有所谓的隐式等待。如果这些还不够,请编写自己的方法,如 waitForElement(By)它将等待某些东西出现。

此外,它可能有助于解释单击 <a href="someurl">Create</a> 后发生的情况。

编辑

在你编辑之后,我可以给你更多的指导。如果你的场景是..

  1. Click the link.
  2. Click an item in the dropdown.

然后你可以做类似的事情-

driver.findElement(By.cssSelector("li.dropdown > a[data-toggle='dropdown']")).click();
driver.findElement(By.cssSelector("li.dropdown li > a#createDeal")).click();

由于我不喜欢做这些手动查找元素,所以我想与您分享一个很棒的项目,以帮助您开始使用 Selenium WebDriver Java。 Getting started with selenium (java) on GitHub

这是一个非常实用的项目,包括一个流畅的风格界面,让你远离所有这些driver.findElement()的。你的测试看起来像,

@Config(url="http://mysite.com", browser=Browsers.IE)
public class MyTest extends AutomationTest {
    @Test
    public void test() {
        // we will be at mysite.com right now.
        click(By.cssSelector("li.dropdown > a[data-toggle='dropdown']")
        .click(By.cssSelector("li.dropdown li > a#createDeal"))
        .validatePresent(By.id("someIdThatAppearsAFterClicking"));
    }
}

关于java - Selenium Webdriver click()没有做任何事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19054439/

相关文章:

java - 线程 "main"org.apache.spark.sql.AnalysisException 中出现异常 : cannot resolve

java - 无法从命令提示符运行maven命令,但通过eclipse成功执行

node.js - NightWatch - 无法在具有值的输入上找到带有 xpath 定位器的元素

javascript - 当用户点击 table tbody tr 时

jquery - .on ('click' ... 与 jQuery 中的 .click

java - 在不同文件中的类之间发送数据

java - 从实体列表中获取@OneToMany的有效方法

java - 登录系统.txt文件读取问题

python - Python/Firefox headless 抓取脚本中的 "Failed to decode response from marionette"消息

java - HTMLUnit input.click() 未返回单击应加载的站点