2015-10-06 70 views
3

我正在編寫腳本在JIRA中的屏幕下方選擇並輸入值。如何等待在selenium webdriver中啓用輸入元素?

enter image description here 的「問題類型」與自動填充屬性的「輸入」元素:

<input type="text" autocomplete="off" role="combobox" aria-autocomplete="list" aria-haspopup="true" aria-expanded="false" class="text aui-ss-field ajs-dirty-warning-exempt" id="issuetype-field" aria-controls="issuetype-suggestions">

右關於「輸入型」,字段,諸如的其餘部分進入值後'摘要'灰色了幾秒鐘。如果我嘗試之後進入了「摘要」字段的值,使用下面的代碼:

myDriver.findElement(By.id("summary")).sendKeys(summary); 

彙總字段將不能進入,而一個錯誤「元素不在緩存中發現 - 也許是因爲它的網頁已更改被擡起頭......「會發生。對於「摘要」字段

HTML代碼:

<input type="text" value="" name="summary" id="summary" class="text long-field">

所以什麼,我想要的只是等待啓用「總結」輸入字段,然後sendkey它。我在尋找類似

ExpectedConditions.presenceOfElementLocated 

而是我想「啓用」,而不是presenceOfElementLocatedvisibilityOfElementLocated。我也不想使用Thread.sleep()

有什麼建議嗎?

回答

1
public void waitForElementEnabled(final WebElement element) { 
    try { 
     getWait().until((ExpectedCondition<Boolean>) driver -> element.isEnabled()); 
    } catch (Exception e) { 
     LOGGER.info(
       e + " : " + "Timed out waiting for element: " + element); 
    } 
} 

等待是WebDriverWait,我們要等到我們啓用WebElement時得到真正的響應。驅動程序是我的WebDriver實例,它是全局聲明的。如果超時而沒有得到真正的響應,那麼我會忽視異常(以便測試將繼續)並顯示一條消息,通知操作超時。 我使用Lambda表達式,所以你需要在硒3.1或更高(與番石榴21)

+0

請爲您的答案中提供的代碼提供一些解釋 –

相關問題