text_field.set不在测试脚本中工作但在irb中工作正常

时间:2013-07-03 22:45:39

标签: ruby watir-webdriver testunit

我正在尝试从以下位置重命名文件夹:

<li class="selected rename" id="labelset-624" folderid="624" foldertype="labelset" permissionlevel="2" labelsetid="624">
  <div class="folder-insert-drop ui-droppable"></div>
  <div class="clear"></div>
  <div class="folder-item droppable hoverable empty ui-droppable">
    <div id="mlink-labelset-624" class="folder-menu-link" data-hasfullperm="true" data-subfoldertype="undefined"></div>
    <div class="expander"></div>
    <div class="folder-name labelset label-set">New Label Set</div>
    <div class="target-bar"></div>
    <div class="folder-rename">
      <input value="New Label Set" id="folder-rename-624" maxlength="100" type="text">
    </div>

使用以下命令使用watir-webdriver:

@b.li(:class, "selected rename").div(:class, "folder-rename").text_field.wait_until_present
@b.li(:class, "selected rename").div(:class, "folder-rename").text_field.set labelsetName
@b.li(:class, "selected rename").div(:class, "folder-rename").text_field.send_keys :return

它给了我以下错误:

Watir::Exception::UnknownObjectException: unable to locate element, using {:class=>"selected rename", :tag_name=>"li"}

当我运行我的测试脚本(测试单元)时,我可以看到输入到文本字段中的labelsetName的值,但它会很快消失并恢复为默认值。这会导致send_keys语句出错。

当我在irb中输入相同的命令时,它完美地运行。我尝试在步骤之间添加长达15秒的睡眠无济于事。这两个人的工作方式有什么不同吗?有什么建议可以解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

除非您有其他令人信服的理由,否则请尝试访问&lt; input&gt;直接使用id属性标记:

b.text_field(:id => "folder-rename-624").set "foo"
b.text_field(:id => "folder-rename-624").send_keys :return

并且 - 如果有关联的提交按钮 - 请尝试使用该按钮而不是send_keys :return

编辑:很遗憾,我无法重现正在消失的文字问题。但是我正在添加这个片段,它应该处理递增的id属性:

tfs = b.text_fields
b.text_field(:id => "#{tfs.last.id}").set "foo"
b.text_field(:id => "#{tfs.last.id}").send_keys :return

答案 1 :(得分:0)

事实证明,因为我多次运行测试,每次创建一个新文件夹时,我试图重命名的文件夹被推离屏幕。这就是导致错误的原因。