1

硒 2.25、火狐、OSX ML。

我让 Selenium 单击具有 Ajax 影响的按钮。

然后我想与结果进行交互。如果没有下面的睡眠,我会收到点击失败的错误,因为它无法将点击目标滚动到视图中。我不明白。这是怎么回事?

    WebElement sampleComboInput = driver.findElement(By.id("sampleCombo-inputEl"));
    sampleComboInput.click();
    sampleComboInput.sendKeys("English-03.txt");
    sampleComboInput.sendKeys(Keys.TAB, Keys.TAB);
    WebElement goButton = driver.findElement(By.id("inputDialogGoButton-btnInnerEl"));
    goButton.click();

    WebElement resultsSpan = driver.findElement(By.cssSelector("span.ne-type-node.PERSON"));
    assertTrue(resultsSpan.isDisplayed());
    assertEquals("PERSON (3)", resultsSpan.getText());
    WebElement parent = resultsSpan.findElement(By.xpath(".."));
    Thread.sleep(5000); // without sleep, get error unable to scroll
    Actions action = new Actions(driver);
    action.doubleClick(parent);
    action.perform();
4

2 回答 2

0

它需要等待元素加载,您是否尝试过 waitForVisible ?使用睡眠可能会更有效,这可能会导致您的代码在等待时间可能更长的其他机器上无法运行

于 2012-08-18T23:47:53.753 回答
-1

您应该尽量避免使用 Thread.Sleep,因为它会不一致地工作。空间游侠是正确的,它需要等待元素加载。

c# 版本具有“WebDriverWait”类和“Until”方法。使用这两个,您可以等待元素加载。

查看 Loudenvier 对这篇文章的回答: Selenium c# Webdriver: Wait until Element is Present

这是我喜欢的方式。使用简单,易于重复使用,并且避免了与 Thread.Sleep 相关的问题。

于 2012-10-19T19:51:17.450 回答