I tried to set a cookie programmatically and PhantomJSDriver rejects that cookie even if cookie belongs to the current domain. The error message is very generic not revealing much details:
Caused by: org.openqa.selenium.UnableToSetCookieException: {"errorMessage":"Unable to set Cookie",...
Same command works with FirefoxDriver and ChromeDriver (see test cases to reproduce below).
- Is there some workaround or fix for that?
- How can I troubleshoot the problem better, e.g., get more informations about rejection reason from PhantomJS?
I'm using PhantomJSDirver 1.2.1 with phantomjs 2.2.1
import org.openqa.selenium.Cookie;
import org.openqa.selenium.InvalidCookieDomainException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.util.function.Supplier;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.startsWith;
public class CookiesTest {
@Test(dataProvider = "webDrivers")
public void shouldAcceptCookieForCurrentDomain(String type, Supplier<WebDriver> drivers) {
WebDriver driver = drivers.get();
driver.get("http://www.bbc.com");
assertThat(driver.getCurrentUrl(), startsWith("http://www.bbc.com"));
driver.manage().addCookie(
new Cookie.Builder("MYCOOKIE", "value").domain("www.bbc.com").build());
assertThat(driver.manage().getCookieNamed("MYCOOKIE").getValue(), equalTo("value"));
driver.close();
}
@Test(dataProvider = "webDrivers", expectedExceptions = InvalidCookieDomainException.class)
public void shouldRejectedCookieForDifferentDomain(String type, Supplier<WebDriver> drivers) {
WebDriver driver = drivers.get();
driver.get("http://www.bbc.com");
assertThat(driver.getCurrentUrl(), startsWith("http://www.bbc.com"));
driver.manage().addCookie(
new Cookie.Builder("MYCOOKIE", "value").domain("different.domain.com").build());
driver.close();
}
@DataProvider
public Object[][] webDrivers() {
System.setProperty("webdriver.chrome.driver", "/Users/mgawinec/dev-tools/chromedriver/chromedriver");
Supplier<WebDriver> phantomJSDrivers = () -> new PhantomJSDriver();
Supplier<WebDriver> firefoxDrivers = () -> new FirefoxDriver();
Supplier<WebDriver> chromeDrivers = () -> new ChromeDriver();
return new Object[][]{
{"phantomJS", phantomJSDrivers},
{"firefox", firefoxDrivers},
{"chrome", chromeDrivers}};
}
}