使用Selenium远程服务器时查找元素

时间:2017-08-29 10:09:23

标签: java selenium selenium-chromedriver selenium-grid2

在我的测试中我试图从服务器下载文件,验证(如果已下载)并删除它。但每次我使用远程服务器(Selenium Grid,Chrome版本= 59.0.3071.115)运行测试时,我都会在验证期间收到NullPointer。

如果我尝试在本地运行测试,它会毫无问题地通过。

我的远程驱动程序类

private WebDriver getRemoteDriver(Browser browser) throws MalformedURLException {
    DesiredCapabilities desiredCapabilities = getCapabilities(browser);
    desiredCapabilities.setCapability("platform", "LINUX");

    LoggingPreferences logPrefs = new LoggingPreferences();
    logPrefs.enable(LogType.BROWSER, Level.ALL);
    desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
    String downloadFilepath = System.getProperty("user.dir") + File.separator + "downloads";

    HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
    chromePrefs.put("profile.default_content_settings.popups", 0);
    chromePrefs.put("download.default_directory", downloadFilepath);
    chromePrefs.put("download.directory_upgrade", true);
    chromePrefs.put("download.extensions_to_open", "");
    chromePrefs.put("download.prompt_for_download", false);
    chromePrefs.put("plugins.always_open_pdf_externally", false);
    ChromeOptions options = new ChromeOptions();
    HashMap<String, Object> chromeOptionsMap = new HashMap<String, Object>();
    options.setExperimentalOption("prefs", chromePrefs);

    desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptionsMap);
    desiredCapabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
    desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, options);

    final RemoteWebDriver remoteWebDriver = new RemoteWebDriver(new URL(remoteUrl), desiredCapabilities);
    remoteWebDriver.setFileDetector(new LocalFileDetector());

    return new Augmenter().augment(remoteWebDriver);
}

部分测试如下:点击按钮下载文件,等待新文件并验证,删除文件。

driver.findElement(By.xpath(".//*[@id='browseOrders:browseView:browseViewPdfExpTblLnk']/span[1]"))
                .click();

    File file = navigationUtil.WaitForNewFile(download_folder, ".pdf", 60);

    String fname = file.getName();
    logger.info(fname);

    boolean success = file.exists();

    Assert.assertTrue(success);

    file.delete();

我经常在行中获取java.lang.NullPointerException字符串fname = file.getName();所以我假设永远不会下载文件。

为什么远程服务器上存在查找并单击某些元素的问题。在这种情况下,单击“齿轮按钮”和下载按钮后会显示菜单,但即使我尝试不同的方式找到它,远程机器也找不到“齿轮按钮”。

0 个答案:

没有答案