【问题标题】:How can I automate a slider using watir-webdriver and ruby?如何使用 watir-webdriver 和 ruby​​ 自动化滑块?
【发布时间】:2011-11-16 12:44:47
【问题描述】:

我正在尝试使用 watir-webdriver 和 ruby​​ 自动化 Jquery UI 滑块,但没有运气。我希望能够操纵滑块来增加或减少值。我到处搜索并询问了我的一些同事,但没有人给出答案。我正在为滑块附加一段 HTML 代码。任何帮助将不胜感激。

网址链接:http://www.whatcar.com/new-car-deals/(价格范围滑块)

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

【问题讨论】:

  • 演示页面的链接以及您已经尝试过的内容会更容易提供帮助。
  • 感谢您添加链接.. 这使它更容易。使用该页面时,请务必阅读他们的条款并确保您使用该页面所做的事情不会违反他们的使用条款。

标签: ruby watir watir-webdriver


【解决方案1】:

这是一个 Jquery 小部件,一旦单击其中一个句柄,就会出现(查看脚本)以响应按键。句柄是链接对象,在一对 div 内,外层的 ID 值为 'slider-range'

您应该能够通过browser.div(:id => 'slider-range').link(:index => n) 解决它们,其中 n = 0 表示左手,n=1 表示右手。

先手动试试这个

  • 单击滑块的左侧手柄
  • 然后按键盘上的箭头键。每次按右或左箭头键,它会向上或向下移动 1K(磅)。
  • 将其向右移动后,单击 Home 键,它应重置为其最小值
  • 对右侧手柄重复上述操作,但使用 End 键将其重置到最右侧。

理论上,您可以在右侧滑块上触发点击事件以获得焦点,然后触发一些按键事件以首先将其设置为最右侧(结束),然后使用足够的左箭头将其向下移动到您想要的顶部值。

对左手柄重复,用 home 键将其设置到左端,并用右箭头键移动它

我现在没有时间进一步试验并开发一个精确的脚本,但我认为您可能可以创建两个小函数,即使它们采用上限和下限值并执行所需的按键次数来移动从 5K 降低到合适的量,从 100k 降低到 100k

请注意,这个东西是非常事件驱动的,它会响应(至少在玩它的同时观看开发工具时)被鼠标悬停、mousedown、mouseup 等。如果使用 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 

【讨论】:

  • 谢谢,明天早上试试。如果成功将发布解决方案,否则会让你知道我做了什么。再次非常感谢您为我指明了正确的方向
【解决方案2】:

非常感谢查克。我让它工作了。这是我使用的脚本:

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

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

【讨论】:

  • 为什么是 xpath?它只是让你无法看到你的代码在做什么,也让它变得非常脆弱,对页面布局的更改会一直破坏它。 xpath 是可怕的东西,只有在没有其他方法的情况下才使用它。在您提供的页面上,有一个方便的 div 的 ID 值,它保存了滑块范围内的内容,它看起来非常静态(比页面上 div 的嵌套更静态。为什么不使用`browser.div(: id => 'slider-range').link(:index => 1).send_keys :arrow_right' 代替?
  • 你是一个正在改革的 Selenium 用户吗? (只是好奇)似乎习惯 Selenium 的人沉迷于通过这些可怕的 xpath 表达式选择东西,这些表达式非常脆弱且难以阅读。我的意思是说从现在开始的两个月后,你有任何线索与那里交互的元素吗?以及通过 DOM 跟踪它需要多长时间。将其与正确使用 Watir api 进行比较,您可以立即确定哪个 div 持有您正在向其发送密钥的控件..
  • 我是 Watir 用户,并且从未真正使用 Selenium 达到我使用 watir-webdriver 的水平。我完全明白你来自哪里。我总是通过显示实际元素来进行编码。刚刚在这个特定的例子中使用了 xpath。 (不会再犯同样的错误)。无论如何,再次非常感谢您的反馈,我已经接受了您传递的建议。会尽量远离 xpath
  • 有时它是识别某物的唯一实用方法,但大多数时候,有更好的选择。使用 Watir 玩得开心!
【解决方案3】:

这很好用。我们刚刚将这些滑块添加到我们的网站,我的第一个想法是“我们要如何实现自动化!?”

我想添加一个示例,它将公开可供人们试验的完整代码。下面与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 

【讨论】:

    【解决方案4】:

    为了实现这一点,我使用了 Rspec 和 Watir-Webdriver 和 Page-Object gem:

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

    这个答案来自http://watir.com/guides/special-keys/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多