如何在selenium中使用JavascriptExecutor右键单击svg元素

How to right click on a svg element using JavascriptExecutor in selenium

本文关键字:右键 JavascriptExecutor 单击 svg 元素 selenium      更新时间:2023-09-26

我必须右击网页的特定部分。

有一些svg元素在背景层的部分,我需要右键单击。这些svg元素位于不可见的不同层中。下面是HTML代码

svg元素的HTML代码

可见部分的HTML代码(突出显示图像中的div元素,类值包含'z-Timeline-TimelineTrack')如下所示(您也可以在下面的代码中看到svg元素部分)网页可见部分的HTML代码

正如你所看到的,有许多'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:参数[0]。点击不是函数

所以请帮我一下。我甚至不能在这个不可见的"线"元素上执行点击。

为了使用JavaScript右键单击(在此帮助下):

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);