使用selenium webdriver + phantom时无法加载https url

时间:2016-12-29 13:26:53

标签: java selenium ssl phantomjs

OS: Windows 10 pro
IDE: Eclipse Neon
JDK: version 1.8.0_91
Selenium standalone server: version 3.0.1
phantom.exe: version 2.1.1 Windows
phantom.jar: version 1.2.1
TestNG: version 6.9.9

说明 我尝试将phantomJS无头浏览器与selenium webdriver和java一起使用。 我需要加载一个有证书错误的https网址(此网站提供的安全证书不是由受信任的证书颁发机构颁发的)。我需要传递这个问题。 我试图这样做(以及其他失败的尝试)如下:

class initializeTest.java

public class initializeTest{

public static WebDriver driver = null;

public static WebDriver settingBrowser(String browser) throws InterruptedException {

if(browser.equalsIgnoreCase("phantom")){
File file = new File("C:\\Program Files\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe");

System.setProperty("phantomjs.binary.path", file.getAbsolutePath());

DesiredCapabilities capabilitiesPhantomJS = DesiredCapabilities.phantomjs();
capabilitiesPhantomJS.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, new String[] {"--ssl-protocol=tlsv1"});
capabilitiesPhantomJS.setPlatform(Platform.ANY);
capabilitiesPhantomJS.setJavascriptEnabled(true);
capabilitiesPhantomJS.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);

driver = new PhantomJSDriver();
}

}
return driver;
}

代码摘录自作为TestNG类运行的类

@BeforeTest
public void navigate() throws InterruptedException{

String selectBrowser = "phantom"
this.driver = initializeTest.settingBrowser(selectBrowser);

driver.navigate().to(https://....);
thread.sleep(5000);

System.out.println(driver.getTitle());
System.out.println("Begin 2");

WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.urlContains("login")); 
System.out.println(driver.getTitle());
}

结果:

1。第一个println运行,控制台上没有打印任何内容。

2。 "开始2"打印并且不执行最后一个println(找不到url的登录字符串)。

3。第三个println未执行

原因是url没有加载,虽然我不明白为什么。 有没有人有想法或知道解决方法?

2 个答案:

答案 0 :(得分:1)

您可能需要添加另一个命令行标志:

--ignore-ssl-errors

(或可能是--ignore-ssl-errors=yes。)

capabilitiesPhantomJS.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, new String[] {"--ssl-protocol=tlsv1", "--ignore-ssl-errors"});

答案 1 :(得分:-1)

您需要设置功能

DesiredCapabilities capabilities;
        capabilities = new DesiredCapabilities();
        String[] phantomArgs = new String[] { "--webdriver-loglevel=NONE" };
    capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, phantomArgs);
        capabilities.setJavascriptEnabled(true);
        capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY,
                "phantomjs.exe");
        capabilities.setCapability("phantomjs.binary.path", "phantomjs.exe path");
        capabilities.setJavascriptEnabled(true);
        PhantomJSDriver driver = new PhantomJSDriver(capabilities);