Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 我如何在watir的div下调用div类?_Ruby_Webdriver_Watir_Watir Webdriver - Fatal编程技术网

Ruby 我如何在watir的div下调用div类?

Ruby 我如何在watir的div下调用div类?,ruby,webdriver,watir,watir-webdriver,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

我正在用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_key:space
因为我想滚动div,所以我可以在其他隐藏的文本字段中发送_key“”。
我甚至尝试使用
browser.scroll.to:bottom
,但仍然不起作用

隐藏的文本字段还是在页面中不可见

您可以尝试聚焦:

browser.text_field(:id => 'myid').focus
或者,如果您需要向下滚动直到它可见

unless browser.text_field(:id => 'myid').visible?   
  browser.div(:class => 'slimScrollDiv').send_keys :arrow_down
end
或者如果需要向下滚动到页脚(页面末尾)


隐藏的文本字段或在页面中不可见

您可以尝试聚焦:

browser.text_field(:id => 'myid').focus
或者,如果您需要向下滚动直到它可见

unless browser.text_field(:id => 'myid').visible?   
  browser.div(:class => 'slimScrollDiv').send_keys :arrow_down
end
或者如果需要向下滚动到页脚(页面末尾)


隐藏的文本字段或在页面中不可见

您可以尝试聚焦:

browser.text_field(:id => 'myid').focus
或者,如果您需要向下滚动直到它可见

unless browser.text_field(:id => 'myid').visible?   
  browser.div(:class => 'slimScrollDiv').send_keys :arrow_down
end
或者如果需要向下滚动到页脚(页面末尾)


隐藏的文本字段或在页面中不可见

您可以尝试聚焦:

browser.text_field(:id => 'myid').focus
或者,如果您需要向下滚动直到它可见

unless browser.text_field(:id => 'myid').visible?   
  browser.div(:class => 'slimScrollDiv').send_keys :arrow_down
end
或者如果需要向下滚动到页脚(页面末尾)


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

在其他元素中选择元素 高层次的答案是这样做没有什么特别的,在许多(大多数)情况下,您甚至不需要担心元素嵌套的深度,只要您有一种唯一的方法来识别它,例如一个唯一的类、名称等。。例如,在您提供的代码中,要获得带有类modal body的div,只需执行以下操作

browser.div(:class => 'modal-body)
如果该类的页面上有很多div,那么您可能希望通过查看其他唯一的容器元素来找到所需的div,以便找到正确的div。。在上面的代码中,这类似于

browser.div(:class => 'slimScrollDiv').div(:class => 'modal-body)
通常,只有当很难找到一种简单的方法来识别一个元素时,您才会做这种事情,因为它几乎没有属性,或者没有唯一的属性

滚动自定义控件 我认为这是你真正的问题。您似乎有一个带有非标准滚动框的控件。也就是说,与简单的HTML不同,HTML的定义使得浏览器可以创建和控制滚动框(通常可以使用您已经尝试过的方法,甚至可以神奇地自动滚动到视图中),而是有一个自定义控件,其中滚动框由javascript代码(如jQuery或Bootstrap)驱动。这类代码通常是事件驱动的,当鼠标在控件上时查找鼠标滚轮的移动,或者手动抓取并拖动呈现为滚动条的元素。这些控件通常不会对空格键或箭头键等按键做出响应,即使它们已被选中、单击、具有焦点等

不过,我还是建议您在滚动框中想要的子元素上使用
.location\u滚动到\u视图中。(参见其他答案中的示例)如果不起作用,请尝试操纵sçroll区域的控件

基于代码片段中的类值,我认为您可能正在处理类似于上所示的jQuery驱动的“slimScroll”控件。如果确实如此,那么您可以通过在scrollbar元素上使用拖动方法来滚动控件。在slimScroll中,所需元素将位于类为“slimScrollDiv”的div内,并且是另一个类为“slimScrollBar”的div

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

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

scrollbar = browser.div(:class => 'slimScrollBar', :index => 1)
scrollbar.drag_and_drop_by 0,10
我不确定你的滚动框里面是什么,但是出于我们称之为“我想要的东西”的目的,你可以用类似这样的代码将它滚动到视图中

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

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

因此,我对您在这里真正想要实现的目标进行了一些猜测。我将首先解决您最初提出的问题,然后解决如何做我认为您正在努力完成的事情

在其他元素中选择元素 高层次的答案是这样做没有什么特别的,在许多(大多数)情况下,您甚至不需要担心元素嵌套的深度,只要您有一种唯一的方法来识别它,例如一个唯一的类、名称等。。例如,在您提供的代码中,要获得带有类modal body的div,只需执行以下操作

browser.div(:class => 'modal-body)
如果该类的页面上有很多div,那么您可能希望通过查看其他唯一的容器元素来找到所需的div,以便找到正确的div。。在上面的代码中,这类似于

browser.div(:class => 'slimScrollDiv').div(:class => 'modal-body)
通常,只有在很难找到一种简单的方法来识别el时,您才会做这种事情