2016-02-26 61 views
0

問題的webdriver - 點擊並刪除所有持續顯示元素

我有一個應用程序,允許用戶備忘錄添加到網頁。我需要能夠找到所有的備忘錄,並從頁面中刪除它們。問題是,我永遠無法確定頁面上有多少個備忘以及它的ID是什麼。每個「備忘錄」都有一個唯一的ID,它取決於頁面上有多少個備忘錄。例如,如果有頁面三個備忘錄那麼我將有三個備忘錄與ID的「memo01,memo02,memo03」等

我現在做的只是搜索5個備忘錄(我假設會有任何從未超過五個),所以我通過包含「memo01,memo02,memo03」的ID搜索元素直到5.然後我依次刪除它們 - 這是有效的。我知道這不是理想的或特別有效,尤其是現在,當我有一息尚存,我有10個音符在頁面上

理想的解決方案的情況下:

我已經想出是要找到所有包含「note」的ID就像這樣:

driver.Findelements(By.XPath("//*[contains(@id, 'note')]")); 

我不在乎找到一個特別的筆記。我只需要找到它們並刪除它們。麻煩的是,上面的xpath定位器也得到了我不感興趣的其他元素的句柄,即它們在DOM中但不在頁面上顯示。

我需要的是循環所有包含「x」的頁面上實際顯示(.displayed)的元素。有任何想法嗎?

+0

確定筆記是相同的(或少數)元素類型的呢?他們也可以有一個共同的父母標籤,這將有助於選擇他們?最後,要檢查元素是否顯示,我相信webdriver有一個'webElement.isDisplayed()'方法 – rubes114

+0

你可以分享HTML代碼嗎? – amitbobade

+0

如果有用於創建這些備忘錄的REST API,則可能還有一個用於刪除它們。如果是這樣,請在運行交互式測試之前使用它,以便運行乾淨。它比直接搜索和刪除它更快,更可靠。 –

回答

1

我想你想是這樣的:

// The selector insid CssSelector is to find all input's ID that contains "memo" 
ICollection<IWebElement> listMemo = driver.FindElements(By.CssSelector("input[id*='memo']")); 
       foreach (var item in listMemo) 
       { 
        item.Displayed = false; 
       }