當刮表單時,我更願意通過標籤來查找字段,因爲我正在使用的大多數ID和名稱都是自動生成的,我不能相信它們不會更改,標籤比名稱更具描述性。機械化:通過標籤文本匹配字段
,而不是我的劇本在做這一切的時候:
Mechanize::Page.elements_with 'label'
#...
some_form.field_with(
some_form.page.label_with(:text => "Address").node['for']
).value = "..."
some_form.field_with(
some_form.page.label_with(:text => "Zipcode").node['for']
).value = "..."
我已經開始把一個猴補丁在我的腳本的頂部:
class Mechanize::Form::Field
def label_text
# hack to get the document root
root = node.ancestors.last
# look up the label for this field
label = root.at("label[for=#{dom_id.inspect}]") if dom_id
label && label.text
end
end
這樣我就可以這樣做:
some_form.field_with(:label_text => "Address").value = "..."
some_form.field_with(:label_text => "Zipcode").value = "..."
這是一個黑客,但它現在的作品。有沒有更優雅的解決方案,我可以使用?
因此,你相信標籤不能改變,但不能形成字段名稱?在我看來,你應該重新審視這個問題。 – pguardiario
我相信標籤變化不太頻繁。 – rampion
更改標籤文本是可能有很好的理由和不會破壞任何東西的東西。你認爲這樣做比沒有理由並且會破壞事物的可能性更小? – pguardiario