selenium unable to set cookie问题
在webDriver中,在一个webDriver登录后,相应的cookies是通过登录操作被保存到一个webDriver中,运行其他webDriver时,又需要做登录操作,如果实现只登陆一次,然后共享cookies岂不是很好。
当尝试添加cookies时抛出selenium unable to set cookie错误,大多情况是在一个webDriver空域(没有访问任意一个页面)中添加cookies,我们要做的就是在赋值cookies之前保证webDriver不是一个空域,比如,让它访问一下需要共享页面的主页。
package cn.baopz.utils;
import cn.baopz.core.Authentication;
import cn.baopz.core.AuthenticationFactory;
import cn.baopz.core.LoginException;
import cn.baopz.core.WebDriverFactory;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebDriver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.TimeUnit;
public class ShareCookiesTest {
private Logger logger = LoggerFactory.getLogger(ShareCookiesTest.class);
private WebDriver mainDriver;
/**
* 在执行Test方法之前,登录
*/
@Before
public void login() {
mainDriver = WebDriverFactory.getChromeWebDriver();
Authentication authentication = AuthenticationFactory.getInstance(mainDriver);
try {
Assert.assertTrue(authentication.check());
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (LoginException e) {
e.printStackTrace();
mainDriver.close();
mainDriver.quit();
}
}
/**
* 共享cookies
*/
@Test
public void shareCookies() {
WebDriver webDriver = WebDriverFactory.getChromeWebDriver();
//访问同一个域中的地址
webDriver.get("https://xxx.xxx.xxx");
//cookie赋值
for (Cookie cookie : mainDriver.manage().getCookies()) {
logger.debug("{}:{}", cookie.getName(), cookie.getValue());
try {
webDriver.manage().addCookie(cookie);
} catch (Exception e) {
//ignore
}
}
//获取资源详情
webDriver.get("https://xxx.xxx.xxx/column/article/1234");
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
webDriver.close();
webDriver.quit();
mainDriver.close();
mainDriver.quit();
}
}
selenium 截图
Selenium截图,当selenium运行时报错,或异常时,需要记录当前页面情况,selenium提供截图
package cn.baopz.utils;
import cn.baopz.core.WebDriverFactory;
import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
public class WebDriverTest {
private Logger logger = LoggerFactory.getLogger(WebDriverTest.class);
private WebDriver webDriver;
@Before
public void before() {
webDriver = WebDriverFactory.getChromeWebDriver();
}
@Test
public void takesScreenshotTest() {
webDriver.get("https://blog.youkuaiyun.com/bpz31456/article/details/81875735");
File source = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);
try {
Files.copy(source.toPath(), new FileOutputStream(new File("C:\\Users\\baopz\\Desktop\\test\\image\\xx\\1.png")));
} catch (IOException e) {
e.printStackTrace();
}
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@After
public void after() {
webDriver.close();
webDriver.quit();
}
}