元素能够在IRB中找到,但不能在webdriver中运行

时间:2014-12-08 22:56:20

标签: rspec selenium-webdriver anchor overlay watir-webdriver

我在应用程序中有一个锚定覆盖,我需要做3个动作:输入文本,选择一个复选框,然后单击确定。我可以找到元素并在IRB中浏览这些元素。但是在webdriver运行时,相同的行代码失败了。我用rspec。我得到Selenium :: WebDriver :: Error :: ElementNotVisibleError的错误:        元素当前不可见,因此可能无法与

进行交互

HTML看起来像:

<div id="xwt_widget_form_AnchoredOverlay_0_Popover" class="xwtPopover xwtAnchoredOverlayPopover dijitTooltipDialog xwt_BasePickerPopover disablePointer xwtAnchoredOverlayPopoverBelow dijitTooltipABLeft dijitTooltipBelow" wairole="presentation" widgetid="xwt_widget_form_AnchoredOverlay_0_Popover" style="top: 0px; visibility: visible;">

在此之下,它是一个文本框表:

 <td class="gridxCell " style="width:100px;;min-width:100px;;" aria-grabbed="false">
<div class="quickFilterItem forHeader-ipaddress">
<div id="widget_dijit_form_TextBox_22" class="dijit dijitReset dijitInline dijitLeft dijitTextBox" role="presentation" widgetid="dijit_form_TextBox_22" style="width: 100px;">
<div class="dijitReset dijitInputField dijitInputContainer">
<input id="dijit_form_TextBox_22" class="dijitReset dijitInputInner" type="text" autocomplete="off" data-dojo-attach-point="textbox,focusNode" tabindex="0" value="">
</div>

这是我的代码:

 def overlay_method(text)
      @browser.div(:class => 'xwt_BasePickerButton dijitDownArrowButton').click
      sleep 3
      @browser.div(:class => 'quickFilterItem forHeader-ipaddress').wait_until_present(10)
      @browser.div(:class => 'quickFilterItem forHeader-ipaddress').text_field.set text
      sleep 1
      @browser.span(:class => 'gridxIndirectSelectionCheckBox dijitReset dijitInline dijitCheckBox', :index => 0).click
      sleep 3
      @browser.div(:class => 'xwtAnchoredOverlayPopoverBelow').span(:text => 'OK').wait_until_present(10)
      @browser.div(:class => 'xwtAnchoredOverlayPopoverBelow').span(:text => 'OK').click


  end

在运行中,看起来叠加层在尝试输入文本或执行任何操作时都会崩溃。 请求提供一些我可以尝试的指示。令人困惑的是,它在irb上工作但不在脚本中运行。我尝试过使用focus,hover,send_keys等。

更新:想出保持浏览器顶部的任何窗口运行,使其工作。我将小终端窗口保持活动(焦点)在浏览器运行的顶部,&amp;我觉得它有效。所以现在在这种行为中如何处理运行。

寻找一些投入。非常感谢。

谢谢

1 个答案:

答案 0 :(得分:0)

我找到了答案。

触发锚定叠加层的点击动作并不是webdriver真正认可的那种东西。因此,虽然显示了叠加层,但webdriver抱怨说这些元素无法进行交互。 我使用.send_keys:输入而不是.click。这使得webdriver能够理解叠加层已经显示,并且可以轻松地与叠加层上的元素进行交互。