我遇到了一个困难,我必须使用带有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
答案 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将按下控制按钮,单击元素,释放控制按钮,然后重复下一个元素。根据应用程序的实现,它可能会或可能不会关心差异。