Java Selenium中禁用Chrome实验性选项same-site-by-default-cookies和cookies-without-same-site-must-be-secure
背景:
Selenium + Java 实现UI自动化,发现登录后,进不了主界面,还是调回登录页,前台报错401,后台日志没发现问题chrome版本 86.0.4240.111(正式版本) (64 位),查资料可知,原来Chrome 51 开始,浏览器的Cookie新增加了一个SameSite属性,用来防止CSRF 攻击和用户追踪。但是我们开发时,少不了跨域啊,上网找了一下资料,有以下解决方法
方法一:
在chrome浏览器的地址栏输入:chrome://flags/ ;然后在搜索框输入:SameSite 将SameSite by default cookies 和 Cookies without SameSite must be secure 状态都改为:desabled;设置后点击“relaunch”按钮生效
然后重新打开网址,登录,发现可以登录后跳转,接着运行UI 自动化代码,发现还是无法登录,重新查看SameSite设置,发现已被重置;没办法,查阅资料后,只能代码中解决;
方法二:
代码中设置:
//设置chrome跨域
ChromeOptions options=new ChromeOptions();
options.addArguments("--args --disable-web-security --user-data-dir");
driver=new ChromeDriver(options);
Log.info("初始化chrome浏览器");
再次运行,还是无法实现登录后跳转;
方法三:
那么,如何在Java Selenium中禁用Chrome实验性选项
same-site-by-default-cookies
和cookies-without-same-site-must-be-secure
?可以使用same-site-by-default-cookies@2
&禁用cookies-without-same-site-must-be-secure@
代码如下:
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setHeadless(false);//true不打开页面,false打开页面
HashMap<String, Object> chromeLocalStatePrefs = new HashMap<String, Object>();
List<String> experimentalFlags = new ArrayList<String>();
experimentalFlags.add("same-site-by-default-cookies@2");
experimentalFlags.add("cookies-without-same-site-must-be-secure@2");
chromeLocalStatePrefs.put("browser.enabled_labs_experiments", experimentalFlags);
chromeOptions.setExperimentalOption("localState", chromeLocalStatePrefs);
再次运行,终于实现登录后跳转;