Ruby Watir,Dijit小部件,从“选择列表”设置值
我希望能够单击以查看可用选项/帐户列表,开始时看起来是隐藏的,然后将dijit小部件select_list设置为特定值 我可以使用Ruby Watir,Dijit小部件,从“选择列表”设置值,ruby,set,watir,dojo,selectlist,Ruby,Set,Watir,Dojo,Selectlist,我希望能够单击以查看可用选项/帐户列表,开始时看起来是隐藏的,然后将dijit小部件select_list设置为特定值 我可以使用 @@ie.element(:css, "#accountSwitcherSelect.dijitDownArrowButton").flash #works 但不能使用“单击”或“设置”: @@ie.element(:css, "#accountSwitcherSelect.dijitDownArrowButton").click #no errors, but
@@ie.element(:css, "#accountSwitcherSelect.dijitDownArrowButton").flash
#works
但不能使用“单击”或“设置”:
@@ie.element(:css, "#accountSwitcherSelect.dijitDownArrowButton").click
#no errors, but doesn't do anything
@@ie.element(:css, "#accountSwitcherSelect.dijitSelectLabel").set("Account2")
#NoMethodError: undefined method `set' for <Watir::HTMLElement:0x4d6af60>
@@ie.element(:css, "#accountSwitcherSelect.dijitSelectLabel").send_keys("Account3")
#NoMethodError: undefined method `send_keys' for <Watir::HTMLElement:0x4d6af60>
工作很好
以下是网站背后的当前html:
<table id="accountSwitcherSelect" class="dijit dijitReset dijitInline dijitLeft dijitDownArrowButton dijitSelectFixedWidth dijitValidationTextBoxFixedWidth dijitSelect dijitValidationTextBox" lang="en-US" cellspacing="0" cellpadding="0" aria-haspopup="true" role="listbox" data-dojo-attach-point="_buttonNode,tableNode,focusNode" style="-moz-user-select: none; width: 207px;" tabindex="0" widgetid="accountSwitcherSelect" aria-expanded="false" aria-invalid="false">
<tbody role="presentation">
<tr role="presentation">
<td class="dijitReset dijitStretch dijitButtonContents" role="presentation">
<div class="dijitReset dijitInputField dijitButtonText" role="presentation" data-dojo-attach-point="containerNode,_popupStateNode" popupactive="true">
<span class="dijitReset dijitInline dijitSelectLabel dijitValidationTextBoxLabel " role="option">Account1</span>
</div>
<div class="dijitReset dijitValidationContainer">
</td>
<td class="dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer" role="presentation" data-dojo-attach-point="titleNode">
<input class="dijitReset dijitInputField dijitArrowButtonInner" type="text" role="presentation" readonly="readonly" tabindex="-1" value="? ">
</td>
假设“选择”列表与上的类似,则需要: 单击输入元素的下拉箭头 单击包含需要td元素的文本的单元格 在您的情况下,它看起来像:
@@ie.input(:class => 'dijitArrowButtonInner').click
@@ie.td(:class => 'dijitMenuItemLabel', :text => /Account1/i).click
下面是一个工作示例,尽管它依赖于仍然在线可用的dijitcss文件
require 'watir-webdriver'
browser = Watir::Browser.new
browser.goto "data:text/html,#{DATA.read}"
browser.input(:class => 'dijitArrowButtonInner').click
browser.td(:class => 'dijitMenuItemLabel', :text => 'Arizona').click
sleep(10) # Just so that you can see the dropdown has changed
browser.close
__END__
<html>
<head>
<link rel="stylesheet" href="https://dojotoolkit.org/reference-guide/1.9/_static/js/dijit/themes/claro/claro.css">
<script>dojoConfig = {async: true, parseOnLoad: true}</script>
<script src="https://dojotoolkit.org/reference-guide/1.9/_static/js/dojo/dojo.js"></script>
<script>require(["dojo/parser", "dijit/form/Select"]);</script>
</head>
<body class="claro">
<div name="select3" value="AL" data-dojo-type="dijit/form/Select">
<span value="AL"><b>Alabama</b></span>
<span value="AZ"><i>Arizona</i></span>
</div>
</body>
</html>
请注意,此代码中的表格是关闭下拉列表时选择的选项。谢谢Justin。。旧的ruby/watir不支持输入元素吗?NoMethodError:未定义的“输入”方法,用于表示年龄有多大?看起来IEinput是在v3.0.0中添加的。如果您让我知道您使用的是哪个版本,我可以查看是否找到了兼容的解决方案(假设不允许升级)。我临时升级到watir-classic-4.0.1,现在可以找到输入元素,但已禁用。。Watir::Exception::ObjectDisabledException:对象{:标记\名称=>[input],:类=>dijitArrowButtonInner}已禁用C:/ruby/lib/ruby/gems/1.8/gems/watir-classic-4.0.1/lib/watir-classic/element.rb:334:in assert_enable d'C:/ruby/lib/ruby/gems/1.8/gems/watir-classic-4.0.1/lib/watir-classic/element.rb:475:in执行动作C:/ruby/lib/lib/ruby/gems/watir-classic-4.0.1/element.1/lib/watir-classic/element.354:in'click!'即使删除了禁用的属性,单击元素也不会触发下拉列表。需要深入了解下拉列表的工作原理。有人对如何访问下拉列表有什么建议吗?
require 'watir-webdriver'
browser = Watir::Browser.new
browser.goto "data:text/html,#{DATA.read}"
browser.input(:class => 'dijitArrowButtonInner').click
browser.td(:class => 'dijitMenuItemLabel', :text => 'Arizona').click
sleep(10) # Just so that you can see the dropdown has changed
browser.close
__END__
<html>
<head>
<link rel="stylesheet" href="https://dojotoolkit.org/reference-guide/1.9/_static/js/dijit/themes/claro/claro.css">
<script>dojoConfig = {async: true, parseOnLoad: true}</script>
<script src="https://dojotoolkit.org/reference-guide/1.9/_static/js/dojo/dojo.js"></script>
<script>require(["dojo/parser", "dijit/form/Select"]);</script>
</head>
<body class="claro">
<div name="select3" value="AL" data-dojo-type="dijit/form/Select">
<span value="AL"><b>Alabama</b></span>
<span value="AZ"><i>Arizona</i></span>
</div>
</body>
</html>
browser.table(:id => 'dijit_form_Select_0').send_keys :enter
browser.td(:class => 'dijitMenuItemLabel', :text => 'Arizona').click