我必须右键点击我网页的特定部分。
在我需要右键单击的部分的背景图层中有一些svg元素。这些svg元素位于不可见的不同层中。下面是html代码
可见部分的HTML代码(图像中突出显示的div元素,其类值包含'z-Timeline-TimelineTrack')如下所示(您还可以在下面的代码中看到svg元素部分) HTML code of visible part of webpage
如您所见,有许多'line'元素..我需要在指定的行上执行右键单击。
我能够使用xpath
下面找到一个特定的线元素@FindBy(xpath ="//*[name()='svg']//*[name()='line'][5]")
public WebElement anyAgendaLine;
通过互联网搜索后,我发现我可以使用JavascriptExecutor点击任何不可见的元素。在找到这个之前我尝试使用Actions来执行上下文菜单点击,这给出了以下错误
引起: org.openqa.selenium.interactions.MoveTargetOutOfBoundsException: 元素内的偏移量无法滚动到视图中:(2.5,0.5): [对象SVGLineElement]
上下文菜单点击的代码如下:
public static void rightClickAndSelectMenuItem(WebElement objWebElement, WebElement menuItem){
Actions action=new Actions(Setup.driver);
action.contextClick(objWebElement).sendKeys(Keys.ARROW_DOWN).click(menuItem).build().perform();
}
在发现上下文菜单点击不起作用后,我试图点击'line'元素:
(JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", objAgendaPage.anyAgendaLine);
给出了以下错误
org.openqa.selenium.WebDriverException:arguments [0] .click不是 功能
所以请帮帮我。我甚至无法只对这个不可见的'line'元素执行单击操作。 实际上我需要执行右键单击。
答案 0 :(得分:0)
要使用JavaScript右键单击(在this的帮助下):
js.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){
// dispatch for IE
return element.fireEvent('onclick', evt)
}
else{
// dispatch for firefox + others
return !element.dispatchEvent(evt);
}
}; contextMenuClick();", objAgendaPage.anyAgendaLine);