从WebDriver执行“native”phantomjs funcs

时间:2013-12-26 20:12:13

标签: c# selenium phantomjs ghostdriver

我正在使用C#(.net framework 4)开发一些Web自动化工具。我正在使用Selenium webDriver和PhantomJS。这真是太棒了! 但有时我想使用“本机”PhantomJS js命令,如:uploadFileinjectJs 有可能吗?

我现在如何使用phantomjs: 我使用--webdriver= param启动phantomjs可执行文件。接下来是:

// connection
private bool ConnectToWebDriver()
        {
            try
            {
                _driver = new RemoteWebDriver(new Uri(localHost+':'+numericPortSelector.Value+"/wd/hub"),
                DesiredCapabilities.PhantomJS());
                _scriptExecutor = _driver as IJavaScriptExecutor;
                _driver.Manage().Timeouts().SetPageLoadTimeout(new TimeSpan(0, 0, (int) numericTimeOut.Value));
                return true;
            }
            catch (Exception)
            {
                return false;
            }  
        }

谢谢!

1 个答案:

答案 0 :(得分:1)

据我所知,WebDriver没有提供调用本机PhantomJs函数的可能性。

1。 injectJs

所以为了让js工作我会建议你以下: 调查JavascriptExecutor解决方法:

JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("var x = $(\'"+webElementCSSSelector+"\');");
        stringBuilder.append("x.click();");
        js.executeScript(stringBuilder.toString());

注意:这个解决方案适合我,但我正在研究JAVA。

2。 uploadFile 要执行文件上载操作,请尝试使用机器人+剪贴板操作以及应该上载的文件位置

Robot robot = new Robot();
        String fileToUploadLocation="C:\\test.png";
        setClipboardData(fileToUploadLocation);
        robot.delay(2000);
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_ENTER);
        robot.keyRelease(KeyEvent.VK_ENTER);

  public static void setClipboardData(String str){
        StringSelection stringSelection = new StringSelection(str);
        Toolkit.getDefaultToolkit().getSystemClipboard().setContents(stringSelection,null);
    } 

注意:这对我来说也很好,但我在java上工作。 希望这会对你有所帮助。