Selenium WebDriver。等待元素后,click()冻结测试

时间:2013-01-17 16:31:20

标签: testing selenium selenium-webdriver automated-tests

我需要使用Selenium WebDriver(Java API)单击动态生成的元素。 我正在等待这个元素出现在WebDriverWait然后点击它。此单击成功,但以下单击不同的静态元素会冻结整个测试。这是代码:

webDriver.get(alfrescoURL + "/share/page/create-document");
WebDriverWait wait = new WebDriverWait(webDriver, 10);

WebElement documentTypeList = webDriver.findElement(By.id("template_x002e_create-document_x002e_create-document_x0023_default_documenttype-selected-form-button-button"));
documentTypeList.click();
WebElement listItem = wait.until(
    ExpectedConditions.visibilityOfElementLocated(By.id("yui-gen100")));
listItem.click();
// Choosing to create in new project
WebElement projectLink = webDriver.findElement(By.id("template_x002e_create-document_x002e_create-document_x0023_default_projecttype-entry1"));
projectLink.click();

documentTypeList.click()打开一个下拉列表,listItem.click()选择一个项目,projectLink.click()在radiobuttons组中做出选择。在projectLink.click()上静默测试冻结。看起来这个click()无限期地等待由于某种原因发生的页面重新加载,而它不应该。 (选择项目后消失列表是由javascript制作的,不会发出任何AJAX请求。)

我认为有一些关于click()阻止我不明白的事情。它在它的javadoc中说,只有当它导致页面加载时它才会尝试阻止。不过在这里我出于某种原因得到了阻止。

如果我在projectLink.click()之前插入线程睡眠,那么测试工作正常。它同意一个假设,即我在click()上得到一个无限块。

提前致谢。

2 个答案:

答案 0 :(得分:0)

在测试运行速度快于下拉可以收缩并且无法单击以下元素之前,我遇到过此问题。而不是使用任意睡眠(尽管在极少数情况下它们是必要的),你能否等待下拉中的课程改变?

例如,如果我想在继续之前等待下拉合同,我将等待select的类从“active”更改为“closed”。当然,这假定您的HTML具有这些动态类。

另一种可能性是设置隐式等待,为这样的实例提供足够的填充:

driver.manage().timeouts().implicitlyWait(1000, TimeUnit.MILLISECONDS);

答案 1 :(得分:0)

我建议您也尝试其他点击选项:

  • a)Actions#click()
  • b)JavaScript click()

如果这些单击中的任何一个有效,则表明问题在于硒的WebElement Click方法,需要报告该问题。