2016-04-27 33 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) 

但我不能想象这种情况什么时候会是真的真实世界中真正的测试所必需的。