Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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
Java 使用selenium三次单击_Java_Selenium_Automated Tests_Dom Events - Fatal编程技术网

Java 使用selenium三次单击

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

这个问题与所问的问题相似。然而,在这种情况下,海报的最终目的似乎实际上是选择一段文字,他们能够找到一个不涉及点击的作品

像上面问题中的用户一样,我最初认为可以通过调用click方法三次来模拟三次单击

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吗?请帮忙。。。?