2016-04-27 32 views
2

我玩rpsec和watir-webdriver,並遇到一個奇怪的問題,我可以點擊按鈕,但我不能與(或更改)文本里面的跨度。
這是HTML的樣子:Rspec和Watir;定位和更改<span>文本內的按鈕元素

<button class="pure-button toggle-mode button-link edit-text-button-element" data-reactid=".0.1.0.1.1.0.0.0.0" title="Edit"> 
    <span class="value false" data-reactid=".0.1.0.1.1.0.0.0.0.0">Untitled</span> 
    </span> 
</button> 

現在我的Ruby代碼看起來是這樣的:

foo = @browser.button(:class, 'pure-button toggle-mode button-link edit-text-button-element') 
foo.click 
foo.span.set('Hello') 

運行這給了我最初的錯誤對我在做什麼expected Hash or (:how, 'what'), got ["Hello"]
有什麼想法這裏錯了嗎?

回答

2

找到了一個解決方案:單擊與元素交互後,我可以使用send_keys設置文本。所以我這樣做:

foo = @browser.button(:class, 'pure-button toggle-mode button-link edit-text-button-element') 
foo.click 
@browser.send_keys {keystrokes simulated here} 
+1

是的。只有輸入類型的元素支持'.set'方法。因此,如果這是一個非標準的自定義控件,則需要使用發送鍵來模擬用戶輸入,並重點關注該元素。 –

0

定位器只接受一個類。

如果你需要的所有類爲它是唯一的嗎:

@browser.button(css: ".pure-button.toggle-mode.button-link.edit-text-button-element")

1

那是因爲你不能設置的Watir-webdriver的跨度的文本。至少如此輕鬆。但是,如果你會做例如:

puts foo.span.text 

它會工作。這裏是你可以用跨度做什麼的完整列表:Usefull Link

當然有改變的跨度文本的方式:

browser.execute_script("arguments[0].textContent= 'Hello'", foo.span) 

但我不能想象這種情況什麼時候會是真的真實世界中真正的測試所必需的。