Java 使用selenium三次单击
这个问题与所问的问题相似。然而,在这种情况下,海报的最终目的似乎实际上是选择一段文字,他们能够找到一个不涉及点击的作品 像上面问题中的用户一样,我最初认为可以通过调用click方法三次来模拟三次单击Java 使用selenium三次单击,java,selenium,automated-tests,dom-events,Java,Selenium,Automated Tests,Dom Events,这个问题与所问的问题相似。然而,在这种情况下,海报的最终目的似乎实际上是选择一段文字,他们能够找到一个不涉及点击的作品 像上面问题中的用户一样,我最初认为可以通过调用click方法三次来模拟三次单击 new Actions(driver) .moveToElement(svgElement, posX, posY) .click() .click() .click() .perform() 但是,这不起作用,因为MyJavaScri
new Actions(driver)
.moveToElement(svgElement, posX, posY)
.click()
.click()
.click()
.perform()
但是,这不起作用,因为MyJavaScript代码检查UIEvent
实例的detail
属性,并且每次调用click
时总是1
。因此,以下代码片段:
function clickHandler (event) {
if (event.detail == 1) {
singleClickHandler()
}
if (event.detail == 2) {
doubleClickHandler()
}
if (event.detail == 3) {
tripleClickHandler()
}
当通过Selenium调用时,singleClickHandler
会被调用三次,而当通过浏览器(Firefox)手动执行时,singleClickHandler
、doubleClickHandler
和tripleClickHandler
会被调用一次
如何通过selenium触发详细信息为3的点击事件?也许您可以尝试以下方法:
WebElement yourElement = driver.findElement(By.xpath("xpath locator here"));
Actions action = new Actions(driver);
Actions action1= new Actions(driver);
action1= action.moveToElement(yourElement).doubleClick();
action1.click().build().perform();
当前的api没有提供一种方法来模拟三次单击,三次单击将发出带有单击次数的单次单击事件。 因此,您最好使用executeScript模拟事件:
String JS_CLICK_TRIPLE =
"var target = arguments[0]; " +
"var offsetX = arguments[1]; " +
"var offsetY = arguments[2]; " +
"var rect = target.getBoundingClientRect(); " +
"var cx = rect.left + (offsetX || (rect.width / 2)); " +
"var cy = rect.top + (offsetY || (rect.height / 2)); " +
" " +
"emit('mousedown', {clientX: cx, clientY: cy, buttons: 1}); " +
"emit('mouseup', {clientX: cx, clientY: cy}); " +
"emit('mousedown', {clientX: cx, clientY: cy, buttons: 1}); " +
"emit('mouseup', {clientX: cx, clientY: cy}); " +
"emit('mousedown', {clientX: cx, clientY: cy, buttons: 1}); " +
"emit('mouseup', {clientX: cx, clientY: cy}); " +
"emit('click', {clientX: cx, clientY: cy, detail: 3}); " +
" " +
"function emit(name, init) { " +
"target.dispatchEvent(new MouseEvent(name, init)); " +
"} " ;
Actions action1 = new Actions(driver);
action1.moveToElement(yourElement, posX, posY).perform();
((JavascriptExecutor)driver).executeScript(
JS_CLICK_TRIPLE, yourElement, posX, posY);
我可以看到Actions类中没有双击这样的选项。您是否检查了尝试Robot类?您是否可以尝试使用
.moveToElement(svgElement,posX,posY)。单击().click().click().build().perform()
?@santhoshkumar:实际上有一个双击()方法,其操作类为yes。。我告诉你好像有双击,但没有三次点击。。。你能试试机器人课吗?。。。。。机器人机器人=新机器人();mouseMove(element.getLocation().x,element.getLocation().x);bot.mousePress(InputEvent.BUTTON1_掩码);bot.mouseRelease(InputEvent.BUTTON1_掩码);bot.mousePress(InputEvent.BUTTON1_掩码);bot.mouseRelease(InputEvent.BUTTON1_掩码);bot.mousePress(InputEvent.BUTTON1_掩码);bot.mouseRelease(InputEvent.BUTTON1_掩码)@ShanthoSuMurar——我可以考虑机器人类,但是对于这个单边的情况,它似乎是多余的。我的理解是<代码>动作< /代码>是使用Builder模式实现的。因此,对实例的每个方法调用(除了build
和perform
)都返回一个新实例。因此,上述操作相当于新操作(驱动程序).moveToElement(您的元素).doubleClick().click().perform()
。关于我问题中的代码,这将导致调用singleClickHandler
和doubleClickHandler
,但不会调用tripleClickHandler
@agdd:您可能是对的;这只是一个疯狂的猜测,以这种方式链接操作可能会起作用。嘿,你发布这篇文章已经有一段时间了,但是你能把它翻译成python吗?请帮忙。。。?