2016-03-14 35 views
0

我試圖讓所有包含屬性詠歎調,需要IwebElements的列表中的所有元素。之所以我試圖讓這個名單,是爲了讓我可以檢查是否所有必填字段都需要用戶填寫,纔可以繼續到下一個頁面。查找的XPath屬性(ARIA-需要= TRUE).//*[@aria-required='true']

到目前爲止搜索後2天,我仍然相信,這不應該是很難。我使用的表達:

」 .//*[@aria-required='true']」

從我的研究,這將意味着它會搜索所有從根開始元素我的webdriver。

[TestMethod] 
    public void CreateProjectWithoutRequiredFields() 
    { 
     GoToProjectPage(); 
     tracking = CM.GoToNewlyCreatedFrameAfterClickButton("ftbNew", tracking, theDriver); 
     CM.Wait(2000); 
     bool succesSave = false; 
     CM.LogToFile("Create project whitout required fields", tracking); 
     foreach (IWebElement e in theDriver.FindElements(By.XPath(".//*[@aria-required='true']"))) 
     { 

      FillDataInNewProjectPage(); 
      e.Clear(); 
      CM.GetDynamicElementById("btnSave", theDriver).Click(); 
      try 
      { 
       CM.GetDynamicElementById("titel", theDriver).Click(); 

      } 
      catch (Exception) 
      { 
       succesSave = true; 
       NUnit.Framework.Assert.IsFalse(succesSave, "The page is saved with succes, without entering text in the following required fields : " + e.GetAttribute("id").ToString()); 

      } 
      CM.Wait(1000); 
     } 

}

我會盡量解釋什麼,我在這裏做的:首先 我去和我的所有現有項目概述頁面。在這個頁面上,我點擊了ftbNew按鈕來創建一個新項目。驅動程序將自動切換到正確的幀(I現在右幀被選擇,因爲我用在其他頁的這一行。)

則線 的foreach(IWebElement E在theDriver.FindElements(By.XPath(」。 // * [@詠歎調-需要= '真']「))){

應normaly找到我的驅動程序中的元素與屬性 」詠歎調-需要= '真'「

然後,它會用數據填充頁面,清除從數據中找到的第一個元素,並嘗試保存它。

如果元素Titel的是在頁面上發現,比我們仍然在同一頁上的連接保存操作不成功(< - 所以這是好的)

所以接下來我們再次覆蓋各個領域該頁面並清除此時找到的第二個元素。

連接等等...

我猜,那的XPath者很難找到一個「老」詠歎調要求的屬性...當我嘗試使用Firebug等的XPath跳棋來驗證我的表情,詠歎調要求的屬性並不總是存在。有時它會發現輸入字段有時不會。

source code page

正如你可以在Firebug控制檯不是所有的屬性都裝看,帳戶管理器有一個唱段要求的屬性,但項目負責人沒有。如果我再次檢查元素,但是這次單擊項目負責人。該屬性將被加載。很奇怪....

額外的信息:我使用框架的,我知道有很多可以去錯了,如果你都坐落在錯誤的框架,但我相信,他期待在正確的框架。特別是因爲我找不到使用上述表達式的螢火蟲的元素。如果我將表達式改爲.//輸入,它將找到元素,但也會選擇不需要的輸入字段。

在事先我要感謝的是想看看我的問題大家:) 阿德里安

回答

0

根據您的頁面上的行爲的描述,你不能依靠詠歎調要求的屬性來指示要求領域。我認爲你應該回到網站的開發者那裏,讓他們給你一個可靠的句柄。這可能與查找與輸入字段相關聯的標籤的最後一個字符「*」一樣簡單,但這有點讓人煩惱不得不處理。

順便說一句,您應該考慮爲您的成功案例捕捉一個更具體的例外情況。現在,如果發生任何異常,您將宣佈成功,但這可能不是您真正想要做的。

+0

感謝您的回覆! 你對這種例外感到懷疑,我必須更具體。 關於表達式,我問他們是否可以使用,而不是「需要詠歎調」使用「必需」,但他們說這是很多工作....所以我試圖通過一個CSS類(「 verplichteControl「的意思是」requiredControl「)(在我最初的帖子中,我有一個圖像) 現在我確實得到具有以下表達式的元素。 「 」.//*[contains(@class,'verplichteControl')]「 因此,它的工作原理......但仍然好奇你爲什麼不能通過屬性選擇元素。 –

+0

哦,你可以通過它的屬性選擇一個元素。這裏的問題是你的應用程序沒有一貫地應用aria-required屬性。例如,我沒有在您所包含的圖像中的項目負責人輸入中看到它。想想看,也許這裏有一個產品缺陷,如果開發人員的工作太多(根本不應該這樣做),他們至少應該爲他們正在嘗試使用的屬性做好準備。 –

相關問題