如何创建一个 org.openqa.selenium.Cookie,其中 isSecure 标志为 false



当创建一个cookie并定义我希望isSecure字段为false时:

driver.manage().addCookie(new Cookie(cookie.getName(), cookie.getValue(), cookie.getDomain(), cookie.getPath(), cookie.getExpiry(), false));

它是Selenium,实际上WebDriver将参数设置为true:

driver.manage().getCookies().forEach(cookie -> {
System.out.println("Adding cookie isSecure: " + cookie.isSecure());
}); //prints Added cookie isSecure: true

我使用硒版本:

<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>

我不知道为什么会这样。 有什么解决方案吗?

您的代码可以在 Firefox 中工作。看起来问题只与铬驱动程序/铬有关。

作为解决方法,请使用火狐。

解释:

用于添加 cookie 的 Java 绑定代码。

public Cookie(String name, String value, String domain, String path, Date expiry,
boolean isSecure, boolean isHttpOnly)

driver.manage().addCookie(
new Cookie("test", "test", "google.com", "/", null, false,false));

对于上面的代码,Webdriver 正在向 chromedriver 服务器发送正确的值。

[1566377805.242][INFO]: [70c91dc21b299384c804d153e40a6b0d] COMMAND AddCookie {
"cookie": {
"domain": "google.com",
"httpOnly": false,
"name": "test",
"path": "/",
"secure": false,
"value": "test"
}
}

甚至Chrome Devtools也在用适当的数据调用Network.setCookie。

DevTools WebSocket Command: Network.setCookie (id=26) BB77CD380D314C209C8F2F8AE97C504D {
"domain": ".google.com",
"httpOnly": false,
"name": "test",
"path": "/",
"secure": false,
"url": "https://www.google.com/?gws_rd=ssl",
"value": "test"
}

对于get调用其返回的"安全":true。

[1566377805.253][DEBUG]: DevTools WebSocket Response: Network.getCookies (id=30) BB77CD380D314C209C8F2F8AE97C504D {
"cookies": [ {
{
"domain": ".google.com",
"expires": -1,
"httpOnly": false,
"name": "test",
"path": "/",
"secure": true,
"session": true,
"size": 8,
"value": "test"
}]

从上面的日志:它看起来像是chromedriver/chrome的问题,而不是Selenium Webdriver JAVA绑定的问题。

对于火狐浏览器,它工作正常

网页驱动程序发送发布请求

DEBUG   -> POST /session/8600dbc1-e2cd-449d-ad0d-fc5261e37266/cookie {
"cookie": {
"domain": "google.com",
"httpOnly": false,
"name": "test",
"path": "u002f",
"secure": false,
"value": "test"
}
}

木偶也发送适当的数据

Marionette  DEBUG   0 -> [0,3,"WebDriver:AddCookie",{"cookie":{"domain":"google.com","httpOnly":false,"name":"test","path":"/","secure":false,"value":"test"}}]

接收正确的值"安全":假

Marionette  DEBUG   0 -> [0,4,"WebDriver:GetCookies",{}]
1566378528552   Marionette  DEBUG   0 <- [1,4,null,[{"name":"test","value":"test","path":"/","domain":".google.com","secure":false,"httpOnly":false}]]

在Firefox/Geckodriver中不是问题

最新更新