2012-03-30 56 views
1
<div id="temp_1333021214801"> 
    <input type="text"/> 
</div> 

$browser.text_field(:xpath,".//*[@id='temp_1333018770709']/input").set("apple") 

我收到錯誤「無法定位元素」,因爲ID動態變化。找不到動態ID的text_field

請幫我設置文本字段中的文本。

+1

您需要爲我們提供頁面的HTML,以及有關該元素的哪些定位器是靜態的和哪些是動態的。到該網站的鏈接將是理想的。 – 2012-03-30 14:11:49

+2

您的「我的html代碼」不顯示任何HTML。我們所有的就是你的Ruby代碼。這種問題沒有HTML會讓我哭泣,然後我的女朋友不得不安慰我,它會變得凌亂,有時我會想念晚餐。所以,請爲了我的營養。 – kinofrost 2012-03-30 16:25:36

+0

向我們展示您嘗試自動執行的網頁中的HTML。停止使用xpath,除非它是唯一的方法。此外,我在這裏看到與黃瓜有關的零,爲什麼它甚至在標題中,這與您的問題有什麼關係? – 2012-03-30 17:01:12

回答

0

如果具有動態的ID,我可以建議如下:

  1. 代碼爲對象計數。例如

    $browser.text_field(:index => 2)

    給出了頁面上的第三text_field。

  2. 代碼是什麼附近你想找的東西。

    $browser.div(:name => 'mydiv').text_field(:index=>2)

    給出了所謂的 'mydiv' div中第三個文本框。

無論其

如果您的前端是低於可測試這種方式,我強烈建議你把時間,以爲在你的承諾,自動化測試在首位。對軟件的任何細微更改都會讓你工作到晚上9點,直到你更新所有腳本,並且在你更新所有腳本時來回擺動,所以除非代碼維護是你週末的愛好,否則請考慮半自動化或探索性測試或手動腳本。談談發展(可能是誰,可能是你!)或上級(除非你也是),看看它是否可以做更多的測試。除非你對它有一些異乎尋常的樂趣,否則不要使用xpaths。

希望有幫助,我不能做任何具體的沒有源HTML。

+0

考慮到我們缺少真正需要的信息(html示例)以提供特定答案 – 2012-03-30 16:58:22

0

好像你的動態ID是上述temp_所以這應該做它給出的信息:

browser.div(:id, /temp_\d+/).text_field.set 'something' 

問題與我的解決方案是,它假定ID將永遠是temp_正則表達式匹配任意數量的連續設置,這似乎上面的例子就是這種情況。此外,它假定該頁面的DOM中沒有其他div(:id,/ temp_ \ d + /)組合,這很可能不是問題。