2013-01-17 55 views
2

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

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()使组单选按钮的选择。测试在projectLink.click()上静静地结冰。它看起来像这样click()无限期地等待页面重新加载,而不是由于某种原因发生。 (选择一个项目后消失的列表是由JavaScript做出的,不会产生任何AJAX请求。)

我认为有一些关于click()阻止我不明白。它说它是javadoc,它试图阻止只有当它导致页面加载。尽管如此,在这里我出于某种原因得到一个块

如果我在projectLink.click()之前插入线程睡眠,则测试正常工作。它同意一个假设,我在click()上获得无限的阻挡。

在此先感谢。

回答

0

我跑到这之前测试运行速度比下拉可以收缩,并且不能单击下面的元素。而不是使用任意的睡眠(尽管在极少数情况下它们是必要的),你是否可以在下拉菜单中等待班级变更?

例如,如果我想等下降之前继续合同,我会等待选择的类从“活动”更改为“关闭”。这当然,假设你的HTML具有这些动态类。

另一种可能性是设置一个隐含的等待,给自己像这些情况下足够的填充:

driver.manage().timeouts().implicitlyWait(1000, TimeUnit.MILLISECONDS); 
相关问题