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