如何使用Ruby与Selenium Watir-webdriver执行Ctrl +多次鼠标点击操作?

时间:2014-11-12 11:39:46

标签: ruby selenium selenium-webdriver watir-webdriver

我遇到了一个困难,我必须使用带有Ruby的watir-webdriver执行Ctrl +鼠标点击操作

在我的Web应用程序应用程序中,我必须使用Ctrl键和鼠标单击选择多个选项(随机选项并非所有选项)。我可以看到使用C#或Java的多种解决方案。但我找不到任何使用Ruby和Watir-webdriver的解决方案。谁能帮我?

我尝试使用以下代码  regionsArray = ['航空公司','生物技术','金融集团','食品零售','餐馆','储蓄银行和烟草']

      oPage.action.key_down(:control)

      puts "hello2"
      regionsArray.each { |x|
        indXpath="//div[@id=('options-tree-region')]//div[text()='#{x}']"
        indText = UtilsCommon.GetElementWithXpath(oPage, indXpath, 10, true)

          if indText!= false 
            indText.click
    end

enter image description here

1 个答案:

答案 0 :(得分:2)

我假设控件的行为类似于jQuery UI selectable,并将使用他们的demo作为示例。

演示页面是:

<html lang="en">
  <head>
    <link rel="stylesheet" href="https://code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css">
    <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
    <script src="https://code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
    <link rel="stylesheet" href="https://jqueryui.com/resources/demos/style.css">

    <style>
      #feedback { font-size: 1.4em; }
      #selectable .ui-selecting { background: #FECA40; }
      #selectable .ui-selected { background: #F39814; color: white; }
      #selectable { list-style-type: none; margin: 0; padding: 0; width: 60%; }
      #selectable li { margin: 3px; padding: 0.4em; font-size: 1.4em; height: 18px; }
    </style>
    <script>
    $(function() {
        $( "#selectable" ).selectable();
    });
    </script>
  </head>
  <body>
    <ol class="ui-selectable" id="selectable">
       <li class="ui-widget-content ui-selectee">Item 1</li>
       <li class="ui-widget-content ui-selectee">Item 2</li>
       <li class="ui-widget-content ui-selectee">Item 3</li>
       <li class="ui-widget-content ui-selectee">Item 4</li>
       <li class="ui-widget-content ui-selectee">Item 5</li>
       <li class="ui-widget-content ui-selectee">Item 6</li>
       <li class="ui-widget-content ui-selectee">Item 7</li>
    </ol>
  </body>
</html>

选项1 - 使用ActionBuilder

正如您所注意到的,您可以调用Selenium-WebDriver ActionBuilder按下控件然后单击元素。我猜你的代码不起作用是因为从未调用perform方法进行操作。对于演示页面,要保持控制并单击每个li将是:

# Press control (note the call to 'perform' the action)
browser.driver.action.key_down(:control).perform

# Click the elements
browser.lis.each(&:click)

因此按下控件然后在结束时释放,你也可以这样做:

action = browser.driver.action
action.key_down(:control)
browser.lis.each { |li| action.click(li.wd) }
action.key_up(:control)
action.perform

选项2 - 使用修改器进行点击

另一种解决方案是使用带有修饰符的Watir点击方法。修饰符可用于告诉Watir在单击元素时按住某些键。例如,以下内容将在单击每个li时按下控制:

browser.lis.each do |li|
  li.click(:control)
end

请注意,这在技术上与选项1中的用户行为不同。在选项1中,在单击所有lis时保持控制按钮。相反,选项2将按下控制按钮,单击元素,释放控制按钮,然后重复下一个元素。根据应用程序的实现,它可能会或可能不会关心差异。