Selenium:为什么在点击前显然需要睡觉?

时间:2012-08-18 23:18:23

标签: selenium-webdriver

Selenium 2.25,Firefox,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();

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

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

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

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

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