如何在selenium

时间:2016-10-27 08:02:14

标签: javascript html selenium svg selenium-webdriver

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

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

HTML Code of the svg elements

可见部分的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'元素执行单击操作。 实际上我需要执行右键单击。

1 个答案:

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