PhantomJS鼠标右键单击将无法与selenium webriverJS一起使用

时间:2014-05-15 06:46:28

标签: javascript selenium selenium-webdriver phantomjs

我正在使用selenium和webdriverJS,试图自动化简单的网络应用程序。 问题是从chrome切换到phantomJS测试没有按预期工作: 鼠标右键不打开上下文菜单。有没有人有这样的问题,有什么解决方案吗? 这是一个小代码示例:

 return driver.actions()
        .mouseMove(driver.findElement(mapping.xpath.spaceSpace), {x:120, y:120})
        .click(mapping.key.mouseRightButton)
        .perform()

尝试删除坐标,在点击操作中添加它们,还有不同的鼠标事件 - 没有。 但同样的测试在chrome,firefox和ie。

中运行完美无缺

1 个答案:

答案 0 :(得分:0)

此问题已解决,但尚未发布:https://github.com/ariya/phantomjs/issues/14005

在修复之前,以下是一些解决方法:

爪哇

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.phantomjs.PhantomJSDriver;

public void contextClick(WebDriver driver, WebElement element) {
    if(driver instanceof PhantomJSDriver) {
        String script =
                "var element = arguments[0];" +
                "var event = document.createEvent('HTMLEvents');" +
                "event.initEvent('contextmenu', true, false);" +
                "element.dispatchEvent(event);";
        ((JavascriptExecutor)driver).executeScript(script, new Object[]{element});
    } else {
        (new Actions(driver))
                .contextClick(element)
                .build()
                .perform();
    }
}

的Python

from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver import PhantomJS, ActionChains

def context_click(driver, element):
    # type: (WebDriver, WebElement) -> ()
    if isinstance(driver, PhantomJS):
        script = "var element = arguments[0];" \
                "var event = document.createEvent('HTMLEvents');" \
                "event.initEvent('contextmenu', true, false);" \
                "element.dispatchEvent(event);"
        driver.execute_script(script, element)
    else:
        ActionChains(driver) \
            .move_to_element(element) \
            .context_click() \
            .perform()