1

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

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 的东西,它会不断地与服务器通信以获取更新/弹出窗口等?

有人听说过这个或将它与硒一起使用吗?

4

3 回答 3

3

它单击第一项(“创建”的链接文本),但永远不会到达序列中的下一行。

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

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

我提出的一个建议是首先清理你的代码..

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

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

WebDriver driver = new IEDriver(capabilities);

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

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

此外,它可能有助于解释点击后会发生什么<a href="someurl">Create</a>

编辑

在你的编辑之后,我可以给你更多的指点。如果你的情况是..

  1. 点击链接。
  2. 单击下拉列表中的项目。

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

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

由于我不喜欢手动执行这些 findElements,因此我想与您分享一个很棒的项目来帮助您开始使用 Selenium WebDriver Java。 GitHub 上的 selenium (java) 入门

这是一个非常实用的项目,包括一个流畅的风格界面,并将您从所有这些中抽象出来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"));
    }
}
于 2013-09-27T15:33:56.380 回答
1

我能想出的唯一解决方案是改变开发人员在我们的开发环境中使用 signalR 的方法。他们使用了foreverframe,但这只是不能与硒打球,所以我不得不让他们改回长轮询。在 dev 与 live 中有不同的配置并不理想,但它解决了这个问题......

于 2013-11-18T09:37:36.607 回答
0

试试这个示例代码:

JavascriptExecutor executor= (JavascriptExecutor)driver;
executor.executeScript("document.getElementById('ID').style.display='block';");
Select select = new Select(driver.findElement(By.id("ID")));
select.selectByVisibleText("value");
Thread.sleep(6000);

通过使用 java 脚本执行器并使元素可见,然后通过 ID 单击元素。希望它有帮助..

于 2014-01-31T09:02:07.873 回答