4

我需要使用 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()在单选按钮组中进行选择。测试静默冻结projectLink.click()。看起来这click()无限地等待由于某种原因发生的页面重新加载,而它不应该。(选择项目后列表消失是由不发出任何 AJAX 请求的 javascript 完成的。)

我认为有一些关于click()阻塞的东西我不明白。它在它的 javadoc 中说,它仅在导致页面加载时才尝试阻止。尽管如此,由于某种原因,我在这里遇到了障碍。

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

提前致谢。

4

2 回答 2

0

我之前遇到过这种情况,测试运行速度超过了下拉菜单的收缩速度,并且无法单击以下元素。除了使用任意睡眠(尽管在极少数情况下它们是必要的),您可以等待下拉列表中的类更改吗?

例如,如果我想在继续之前等待下拉菜单收缩,我将等待选择的类从“活动”变为“关闭”。当然,这假设您的 HTML 具有这些动态类。

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

driver.manage().timeouts().implicitlyWait(1000, TimeUnit.MILLISECONDS);
于 2013-02-25T20:16:17.347 回答
0

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

  • 一个)Actions#click()
  • b) Javascript click()

如果这些点击中的任何一个有效,则意味着问题出在硒的 WebElement Click 方法上,需要报告。

于 2019-11-22T16:46:11.507 回答