1

我正在用 C# (.net framework 4) 开发一些网络自动化工具。我正在使用 Selenium webDriver 和 PhantomJS。这真是一件很棒的事情!但有时我想使用“本机”PhantomJS js 命令,例如:uploadFile或者injectJs 有可能吗?

我现在如何使用 phantomjs:首先我使用--webdriver=参数启动 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;
            }  
        }

谢谢!

4

1 回答 1

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 上工作。希望这对您有所帮助。

于 2014-07-06T17:52:37.520 回答