Safari Selenium-行动类和;JavaScriptExecutor不工作

Safari Selenium-行动类和;JavaScriptExecutor不工作,selenium,automation,safari,Selenium,Automation,Safari,我们正试图将当前的自动化扩展到Safari浏览器上,并面临多个问题。这些功能在Chrome、Firefox以及最近的IE上都能很好地工作,但在Safari上会遇到一些问题。非常感谢您对这些问题的任何帮助或建议 Actions类在safari中似乎不起作用,我们将Actions类用于dragAndDrop。当我们尝试为dragAndDrop使用actions类时,会抛出一个错误“org.openqa.selenium.elementNotInteractivatableException:”当我们

我们正试图将当前的自动化扩展到Safari浏览器上,并面临多个问题。这些功能在Chrome、Firefox以及最近的IE上都能很好地工作,但在Safari上会遇到一些问题。非常感谢您对这些问题的任何帮助或建议

Actions类在safari中似乎不起作用,我们将Actions类用于dragAndDrop。当我们尝试为dragAndDrop使用actions类时,会抛出一个错误
“org.openqa.selenium.elementNotInteractivatableException:”
当我们尝试为moveToElement使用actions类时,它也不起作用。是否有一个可供选择的类操作

备选方案:尝试从此站点使用dragAndDrop,但也不起作用:

JavaScriptExecutor不在Safari上工作。当我们尝试JavascriptExecutor时,它会抛出相同的错误
“org.openqa.selenium.elementNotInteractiableException:”
是否需要启用任何功能才能使其工作?我启用了:
safariOptions.setCapability(CapabilityType.SUPPORTS_JAVASCRIPT,“true”)
如果我尝试设置以下功能,浏览器甚至不会启动:

safariOptions.setUseCleanSession(true);
safariOptions.setUseTechnologyPreview(true);

如果你们中有人遇到了这些问题,或者有其他选择,请给出建议。

我正在测试剑道应用程序,并在中尝试了这些解决方案,但这是一个不同的解决方案,最终对我有效,包括Safari 14

(使用WebElements而不是CSS字符串的小改动):

按照Selena上述答案中的解决方案注入javascript(将文件读入变量
java\u script
)。针对现有WebElements(
拖动
拖放
)执行以下操作:


我在测试一个剑道应用程序,并在中尝试了这些解决方案,但这是一个不同的解决方案,最终对我有效,包括Safari 14

(使用WebElements而不是CSS字符串的小改动):

按照Selena上述答案中的解决方案注入javascript(将文件读入变量
java\u script
)。针对现有WebElements(
拖动
拖放
)执行以下操作:


您使用的是什么Safari和Selenium版本?我想我在Safari 14.0.2和Selenium 3.141.59中遇到了同样的问题。您使用的是什么Safari和Selenium版本?我想我在Safari 14.0.2和Selenium 3.141.59中遇到了同样的问题。
var triggerDragAndDrop = function (elemDrag, elemDrop) {
  /* function for triggering mouse events */
  var fireMouseEvent = function (type, elem, centerX, centerY) {
    var evt = document.createEvent('MouseEvents');
    evt.initMouseEvent(
      type,
      true,
      true,
      window,
      1,
      1,
      1,
      centerX,
      centerY,
      false,
      false,
      false,
      false,
      0,
      elem
    );
    elem.dispatchEvent(evt);
  };

  /* calculate positions*/
  var pos = elemDrag.getBoundingClientRect();
  var center1X = Math.floor((pos.left + pos.right) / 2);
  var center1Y = Math.floor((pos.top + pos.bottom) / 2);
  pos = elemDrop.getBoundingClientRect();
  var center2X = Math.floor((pos.left + pos.right) / 2);
  var center2Y = Math.floor((pos.top + pos.bottom) / 2);

  /* mouse over dragged element and mousedown*/
  fireMouseEvent('mousemove', elemDrag, center1X, center1Y);
  fireMouseEvent('mouseenter', elemDrag, center1X, center1Y);
  fireMouseEvent('mouseover', elemDrag, center1X, center1Y);
  fireMouseEvent('mousedown', elemDrag, center1X, center1Y);

  /* start dragging process over to drop target*/
  fireMouseEvent('dragstart', elemDrag, center1X, center1Y);
  fireMouseEvent('drag', elemDrag, center1X, center1Y);
  fireMouseEvent('mousemove', elemDrag, center1X, center1Y);
  fireMouseEvent('drag', elemDrag, center2X, center2Y);
  fireMouseEvent('mousemove', elemDrop, center2X, center2Y);

  /* trigger dragging process on top of drop target*/
  fireMouseEvent('mouseenter', elemDrop, center2X, center2Y);
  fireMouseEvent('dragenter', elemDrop, center2X, center2Y);
  fireMouseEvent('mouseover', elemDrop, center2X, center2Y);
  fireMouseEvent('dragover', elemDrop, center2X, center2Y);

  /* release dragged element on top of drop target*/
  fireMouseEvent('drop', elemDrop, center2X, center2Y);
  fireMouseEvent('dragend', elemDrag, center2X, center2Y);
  fireMouseEvent('mouseup', elemDrag, center2X, center2Y);

  return true;
};
    String js =  "var src = arguments[0];var dest = arguments[1];";
    js += "triggerDragAndDrop(src, dest);";
    JavascriptExecutor executor = (JavascriptExecutor) webdriver;
    executor.executeScript(java_script + js, drag, drop);