2013-01-17 58 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); 
相關問題