2013-10-28 63 views
6

我遇到以下問題。我有一個隱藏的,所以當我做出選擇和運行測試,我得到以下錯誤下拉:Java webdriver:元素不可見異常

org.openqa.selenium.ElementNotVisibleException: element not visible: Element is not currently visible and may not be manipulated 
    (Session info: chrome=30.0.1599.101) 

這是我的選擇:

Select s = new Select(dropDown); 
s.selectByVisibleText("CHARGEBACK"); 

有它周圍散步操縱隱藏的元素?我發現下面的代碼中的職位之一:

JavascriptExecutor jse = (JavascriptExecutor) driver; 
jse.executeScript("arguments[0].scrollIntoView(true);", element); 

這是html代碼:

<div class="ui-helper-hidden"> 
<select id="formLevel:levels_input" name="formLevel:levels_input"> 
<option value="541fac58-5ea8-44ef-9664-e7e48b6c6a3c">Seleccione un Registro</option> 
<option value="dafc799c-4d5e-4b02-a882-74cb6ad98902">SECURITY</option> 
<option value="e5416086-2036-4cd0-b23e-865747aa3f53">CALL CENTER</option> 
<option value="7ea4b4ea-4f06-4d27-9541-1b0cf3f2aa22">CHARGEBACK</option> 
<option value="0f915120-7b8f-4a33-b063-5d20a834b655">PREVENÇÃO A FRAUDE</option> 
<option value="a8ef13e8-f4a5-43b8-a668-b769f6988565">ANALISE DE CREDITO</option> 
<option value="83b65a26-d4cd-43d3-b3fa-2f7894ca454a">SUPORTE A CONTA</option> 
<option value="163d0db9-590c-47a7-a271-218b2d27d8d9">REGULARIZAÇÃO FINANCEIRA</option> 

而且它不會在這種情況下工作。任何幫助,將不勝感激。

+5

你爲什麼不進行有效的測試用例,使得它可見,例如'點擊這個,然後當元素可見時更改下拉列表。這是不好的測試邏輯來操縱隱藏的元素,因爲用戶不會這樣做。 – sircapsalot

+0

另外,如果元素應該是可見的,並且拋出這個錯誤,那麼我會檢查你的選擇器。您可能選擇了錯誤的元素。 –

+0

選擇器很好,因爲我可以找到該元素,但我無法選擇該選項。 P.S添加了html代碼。 – elcharrua

回答

7

由於WebDriver試圖模擬真實用戶,它不能與不可見/隱藏的元素進行交互。要解決您的問題,我認爲您首先需要點擊div,這會使下拉菜單可見,並從下拉列表中選擇選項。我會推薦這種方法,而不是純Javascript方式,因爲它會模擬真正的用戶。給下面的一個鏡頭,

WebDriverWait wait = new WebDriverWait(driver, 300); 
WebElement triggerDropDown = driver.findElement(By 
       .className("ui-helper-hidden")); 
triggerDropDown.click(); 
WebElement selectElement = wait.until(ExpectedConditions 
        .visibilityOfElementLocated(By.id("formLevel:levels_input"))); 
Select select = new Select(selectElement); 
select.selectByVisibleText("SECURITY"); 

編輯更新triggerDropDown

+0

我同意這個答案。你不會需要在這個類型的交互使用FluentWait(忽略例外)(因爲在div點擊有直接的預期結果)等的WebDriverWait就是在這種背景下完美。 – djangofan

0

沒有測試過這一點,但的確下面的工作?

s.selectByValue( 「7ea4b4ea-4f06-4d27-9541-1b0cf3f2aa22」);

0

我絕對同意sircapsalot。您應該掌握應用程序業務邏輯並「像用戶一樣」。只有使用這種方法才能解決問題。

答:

嘗試這種方式

document.getElementById('formLevel:levels_input').options[3].selected = "true"

6

喜的類名可以有這麼多的原因。我也面臨這個問題的次數,並用不同的方式解決。

1-使用WebdriverWait,它也知道作爲明確的等待

2-使用獨特xpath-使用XPath的方式。

3-獲取元件的尺寸然後點擊或執行上第一任何行動。

我這裏How to Solve Element not visible Exception

0

記錄所有的解決方案除了由先前的答案提出的原因和問題,我遇到的另一個原因值得一提。就我而言,頁面上的JavaScript必須在點擊頁面上的鏈接後運行,以便使我想要訪問的元素變得可見。沒關係只要您的驅動程序已啓用JavaScript。在我的情況下,我沒有使用JavaScript,所以儘管鏈接是通過編程「點擊」的,但這些元素並沒有變得可見。我使用HtmlUnitDriver與默認設置。最終我切換到ChromeDriver。 (您可以在HtmlUnitDriver啓用JavaScript,但 - 其他原因 - 是不夠的,我在我的情況。)

相關問題