2017-03-22 90 views
0

我需要瀏覽菜單並選擇一個子菜單。使用Robot Framework選擇子菜單

我使用點擊元素的XPath如下:

//*[@id="gomenu68e1884541"]//nav/div/ul/li[3]/div/ul/li[2]/a 

但它並不能幫助我,因爲iddynamic和變化,每一次,當我訪問應用程序

我怎樣才能瀏覽一個菜單 - >子菜單

欲瞭解更多詳情,請參考下面提到的圖片。

code html

誰能幫助?

+2

你能張貼您的資產淨值的HTML? – Goralight

+2

>如何瀏覽菜單>子菜單?通過不使用動態ID-S,直接派生路徑和索引元素:)。即不要拿什麼xpath瀏覽器爲你生成:)在問題中提供html源代碼,或者鏈接到公開可見的系統,我們會幫助你。 – Todor

回答

0

我對Xpath有同樣的問題。 js,迷惑angular等基於網站,這是生成的內容dinamically根本不工作。我花了很多時間在我以前的自動化項目上,爲此找到了一個解決方案:構建自己的xpath。不僅意味着Insect ElementChrome和其他瀏覽器中,你必須自己構建它們,同時學習代碼和網站的工作方式。這個方法應該遵循:

  • 熟悉前端客戶端的代碼
  • 學習xpath
  • 建立自己的XPath

你必須找出你如何能達到想要的元素,而不使用@id s。使用css classes這是很少隨機改變,並找出你的元素之間的關係。您必須使用following-siblingtext()以及其他不太知名的xpath選擇器。我會建議你this 熟悉xpath。對我來說沒有任何其他的方式,但最終我有一個了不起的,格式良好的變量文件,包含了所有元素的xpath。

+1

必須同意,除此之外別無他法,只能去學習。 Xpath是其他任何語言的子集,甚至非常簡單直接,我們在selenium/webdriver中使用的是大多數情況下的基本集合。我無法想象在沒有編程語言知識的情況下編程。 w3c是明確的資源,但是也可以從w3school教程開始。對於上帝的愛,千萬不要使用瀏覽器性別化的xpath/css :) – Todor

-1

在這種情況下,菜單項(li元素)是具有特定類別的div的孫子,以及ul的子元素。如果你的a後去的XPath的是:

//div[@class="menuslide」]/ul/li/a[@title="Alumnos"] 

如果目標元素應該是li,您可以使用此XPath - 它選擇li具有帶標題的孩子:

//div[@class="menuslide」]/ul/li[a[@title="Alumnos"]] 

如果你想它的任何未來的變化較爲強勁,但速度較慢一點點,你可以跳過uldiv之間的父子關係,以及它和li,並使其只是「找我有一個li元素祖先與類「一div

//div[@class="menuslide」]//li/a[@title="Alumnos"] 

而這個創造的XPath的一般模式 - 你會發現一個共同的屬性模式,將留(類和標題屬性),而只會查明評估路徑具體元素,考慮到評估速度和魯棒性之間的權衡(速度是一個問題與現代瀏覽器和硬件的更少)

+0

感謝您的回答。有可能我無法找到該對象,因爲它在出現響應時被mobile_menu複製出來了。 如果是這樣,我該如何識別重複的項目?由索引?我不知道... – Marta79

+0

如果有多個元素匹配,xpath將返回所有這些元素 - 這就是你會看到更多元素的方式。這是你目前的問題,元素沒有找到? @ Marta79 – Todor

+0

謝謝Todor,我想我已經開始明白髮生了什麼。我可以訪問一級菜單元素,但不能訪問下拉菜單的第二級和第三級。我有這個錯誤>消息:元素不可見。我嘗試過「等到頁面包含元素」,找到包含懸停子菜單的類,但沒有運氣。有什麼建議麼? – Marta79

1

我終於得到它的工作(甚至在第三級菜單的)使用這些命令:

Wait Until Page Contains Element 
Sleep 
Mouse Over 
Click Link 

而且不同的XPath的混合:

xpath=//*[@class="dropdown"]//a[contains(., 'Alumnos')] 
xpath=//*[@class="dropdown"]/li[3]/div/ul/li[1]/div/ul/li[1]/a 

謝謝大家對你的幫助