Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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
如何使用watir webdriver和ruby自动执行滑块?_Ruby_Watir_Watir Webdriver - Fatal编程技术网

如何使用watir webdriver和ruby自动执行滑块?

如何使用watir webdriver和ruby自动执行滑块?,ruby,watir,watir-webdriver,Ruby,Watir,Watir Webdriver,我正在尝试使用watir webdriver和ruby自动化一个jQueryUI滑块,但运气不好。我希望能够操纵滑块来增加或减少值。我到处搜索,问了几位同事,但没有人回答。我附加了一段HTML代码的滑块。任何帮助都将不胜感激 URL链接:(价格范围滑块) 我没有为滑块做任何编码,因为我不知道如何去做。如果我能走上正确的道路,那就太棒了。而且HTML代码似乎没有显示在我所问的问题上 这是一个Jquery小部件,一旦点击其中一个句柄,它就会出现(查看脚本)以响应按键操作。控制柄是链接对象,在一对di

我正在尝试使用watir webdriver和ruby自动化一个jQueryUI滑块,但运气不好。我希望能够操纵滑块来增加或减少值。我到处搜索,问了几位同事,但没有人回答。我附加了一段HTML代码的滑块。任何帮助都将不胜感激

URL链接:(价格范围滑块)

我没有为滑块做任何编码,因为我不知道如何去做。如果我能走上正确的道路,那就太棒了。而且HTML代码似乎没有显示在我所问的问题上


这是一个Jquery小部件,一旦点击其中一个句柄,它就会出现(查看脚本)以响应按键操作。控制柄是链接对象,在一对div内,外部具有ID值“slider range”

您应该能够通过
browser.div(:id=>'slider range').link(:index=>n)对它们进行寻址。
其中n=0表示左侧,n=1表示右侧

请先手动尝试

  • 单击滑块的左手柄
  • 然后按键盘上的箭头键。。每按一次左右箭头键,它将向上或向下移动1K(磅)
  • 将其向右移动后,单击Home键,它应重置为其最小值
  • 对右手柄重复上述操作,但使用结束键将其重置为最右侧
理论上,您可以在右滑块上触发单击事件以获得焦点,然后触发一些按键事件以首先将其设置为最右(结束),然后使用足够多的左箭头将其向下移动到所需的顶部值

对左手柄重复上述操作,使用home键将其设置为左端,然后使用向右箭头键移动

我现在没有时间做进一步的实验和开发一个精确的脚本,但我认为您可能可以创建两个小函数,甚至可以使用上限和下限值,并按所需的按键次数将下限从5K向上移动到正确的数量,将上限从100k向下移动

请注意,这是非常非常事件驱动的,它会对鼠标移到上面、鼠标移到下面、鼠标移到下面等做出响应(至少在观看开发工具时是这样)。。如果使用click无法引起控件的“注意”,因此它将响应按键,请尝试使用onmousedown事件

使用答案中的代码,将左滑块移动到12K,我会尝试

browser.div(:id => 'slider-range').link(:index => 0).click  #make sure it has focus
browser.div(:id => 'slider-range').link(:index => 0).send_keys :home #set to 5K    
7.times do
   browser.div(:id => 'slider-range').link(:index => 0).send_keys :arrow_right
end 

非常感谢你,恰克。我让它工作了。以下是我使用的脚本:

@browser.link(:xpath, "/html/body/div/div[3]/div[4]/div/div/div/a").send_keys :arrow_right

仍然需要一些调整,但我现在应该没事了。

这很有效。我们刚刚在我们的网站上添加了这些滑块,我的第一个想法是“我们如何实现自动化!”

我想添加一个示例,它将提供完整的代码,供人们公开使用。下面是jqueryui.com上的一个示例

require "watir-webdriver"
@browser = Watir::Browser.new :chrome
@browser.goto "http://jqueryui.com/slider/#default"
@browser.frame(:class => "demo-frame").span(:class =>"ui-slider-handle").click
@browser.frame(:class => "demo-frame").span(:class =>"ui-slider-handle").send_keys :home 
puts "clicked home"
7.times do
  @browser.frame(:class => "demo-frame").span(:class =>"ui-slider-handle").send_keys :arrow_right
end 

为了实现这一点,我使用了Rspec和Watir Webdriver以及页面对象gem:

div(:slider, id: "slider-range") #in page file
#then in spec file
browser.slider_element.input.send_keys :home

这个答案来自一个指向演示页面的链接,您已经尝试过的内容将使其更易于帮助。感谢您添加此链接。。这就容易多了。在使用该页面时,请务必阅读他们的条款,并确保您使用该页面所做的操作不会违反他们的使用条款。感谢您将在明天上午尝试使用该页面。如果成功,我会发布解决方案,否则会让你知道我做了什么。再次感谢您为我指明了正确的方向为什么xpath?这只会让你看不到你的代码在做什么,也会让它变得非常脆弱,对页面布局的更改会一直导致这种中断。xpath是可怕的东西,只有在没有其他东西可用时才使用它。在您提供的页面上,有一个方便的div ID值,用于保存用于滑块范围的内容,它看起来非常静态(比页面上的div嵌套更静态。为什么不使用`browser.div(:ID=>'slider range')。link(:index=>1)。改为发送_键:arrow_right'?您是一个Selenium用户吗?(只是好奇)似乎习惯于Selenium的人会沉迷于通过这些可怕的xpath表达式来选择东西,这些表达式非常脆弱且难以阅读。我的意思是,两个月后,你会知道那里正在与什么元素进行交互吗?你会花多长时间通过DOM来跟踪它。将其与使用进行比较正确使用Watir api,您可以立即识别哪个div持有要向其发送密钥的控件。我是Watir用户,从未真正使用Selenium达到使用Watir webdriver的水平。我完全理解您的来源。我总是通过显示实际元素来进行编码。在这个特定示例中使用xpath。(不会再犯同样的错误)。无论如何,再次感谢您的反馈,我采纳了您传递的建议。我会尽量远离XPath有时这是唯一可行的识别方法,但大多数情况下,有更好的替代方法。请享受使用Watir的乐趣!