我正在尝试通过JavaScript executor在锚标签上右键单击事件。但是获取错误" ReferenceError:openQA未定义"。我不确定这是否是在Selenium脚本中调用JS功能的正确方法。
IWebElement folderAtag = driver.FindElement(By.XPath("//[@title='folderA911536']"));
IJavaScriptExecutor js2 = ((IJavaScriptExecutor)driver);
js2.ExecuteScript(
"function contextMenuClick(element){" +
"var evt = element.ownerDocument.createEvent('MouseEvents');" +
"var RIGHT_CLICK_BUTTON_CODE = 2; " +
" evt.initMouseEvent('contextmenu', true, true," +
" element.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, " +
" false, false, false, RIGHT_CLICK_BUTTON_CODE, null); " +
" if (document.createEventObject){ " +
" return element.fireEvent('onclick', evt) " +
" } " +
" };" +
"contextMenuClick(" + folderAtag + ");"
);
用于正确执行JS代码我使用StringBuilder。例如下图:
public void jsClick(String key) throws IOException {
JavascriptExecutor js = (JavascriptExecutor) driver;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("var x = $('"+propertyKeysLoader(key) +"');");
stringBuilder.append("x.click();");
js.executeScript(stringBuilder.toString());
}
顺便说一句,右鼠标单击我将以这种方式解决的元素:
WebElement elem = driver.findElement(By.xpath("//[@title='folderA911536']"));
new Actions(driver).contextClick(elem).perform();