如何在watir中调用div下的div类?

时间:2015-02-05 01:58:08

标签: ruby webdriver watir watir-webdriver

我正在使用Ruby和Watir创建自动化测试脚本。

我试图从这些代码行调用div类:

<div class="slimScrollDiv" style="position: relative; overflow: hidden; width: auto; height: 500px;">

  <div class="modal-body" style="overflow: hidden; width: auto; height: 500px;">
    <form id="user-form" class="form-inline" enctype="multipart/form-data" method="POST" novalidate="novalidate">
        <fieldset></fieldset>
    </form>
  </div>

我的目标是使用这个     browser.div(:class => '').send_keys :space因为我想滚动div,因为我能够发送密钥&#34;&#34;在其他一些文本字段中隐藏。 我甚至尝试使用browser.scroll.to :bottom,但它仍然没有用。

2 个答案:

答案 0 :(得分:2)

所以我正在猜测你在这里要做的事情。我将首先解决您最初提出的问题,然后解决如何做我认为您想要完成的事情。

选择其他元素中的元素 高级答案是,这样做并没有什么特别之处,在许多(大多数)情况下,您甚至不需要担心元素嵌套的深度,只要您有一种独特的方法来识别它,例如一个类,名称等是唯一的..例如,在你提供的代码中,为了获得带有类模态体的div,你就可以了

browser.div(:class => 'modal-body)

如果页面上有很多div与那个类,那么你可能想找到你想要的那个,通过查看一个独特的其他容器元素,你找到正确的..在上面的代码中就像

browser.div(:class => 'slimScrollDiv').div(:class => 'modal-body)

通常只有在难以找到识别元素的简单方法时才会这样做,因为它很少或没有属性或非唯一属性。

滚动自定义控件 我认为这是你真正的问题。您似乎拥有一个非标准滚动条的控件。也就是说,不是简单的HTML定义,以便浏览器创建和控制滚动框(通常可以使用您已经尝试过的方法,甚至可以自动滚动到视图中),而是使用自定义控件滚动框由javascript代码(如jQuery或Bootstrap)驱动。这样的代码通常是事件驱动的,当鼠标悬停在控件上时,查找鼠标滚轮移动等内容,或者手动抓取并拖动正在渲染的元素看起来像滚动条。通常这样的控件不响应空格或箭头等按键,即使它们已经被选中,点击,有焦点等等。

我仍然建议尝试在滚动框内部所需的子元素上使用.location_once_scrolled_into_view。 (参见其他答案中的示例)如果不起作用,则尝试操作söroll区域的控件。

基于代码片段中的类值,我认为您可能正在处理类似于this page.上显示的jQuery驱动的“slimScroll”控件。如果确实如此,那么您可以滚动控件在滚动条元素上使用拖动方法。在slimScroll中,你想要的元素将在div中使用类“slimScrollDiv”,并​​且是另一个具有类“slimScrollBar”的div。

只要滚动条可见,您就应该可以在其上执行.drag_and_drop_by滚动滚动框中的内容。如果它不可见(可能在链接页面上的第一个示例中发生)那么它可能更难,您可能必须尝试触发鼠标悬停事件,或调用一些JS代码来更改它的样式以便不被隐藏。您需要尝试查看一次拖动多少像素,以根据窗口中的内容滚动窗口“正确”的数量。 (可能您可能能够根据元素的.style 'height'值来计算出来,但这需要对实际页面进行实验,只有在框中的内容量可变时才需要)

对于链接页面上的第二个示例,我能够使用以下代码滚动内容

scrollbar = browser.div(:class => 'slimScrollBar', :index => 1)
scrollbar.drag_and_drop_by 0,10

我不确定你的滚动条中有什么内容,但是对于psuedo-code目的,我们只称它为'thing_I_want',那么你可以将它滚动到视图中,代码类似这样

scrollbar = browser.div(:class => 'slimScrollBar')
until thing_I_want.present?
  scrollbar.drag_and_drop_by 0,5
end

正如我所说,你可能不得不在那里使用拖动距离来获得“正确”的数量,但是5(像素)似乎是一个合理的起点。

答案 1 :(得分:1)

隐藏的text_field或仅在页面中不可见?

你可以尝试聚焦:

browser.text_field(:id => 'myid').focus

或者如果你需要向下滚动直到它可见

unless browser.text_field(:id => 'myid').visible?   
  browser.div(:class => 'slimScrollDiv').send_keys :arrow_down
end

或者如果您需要向下滚动到页脚(页面末尾)

 browser.div(:id => 'footer').wd.location_once_scrolled_into_view