我使用selenium在java中获取cookie和本地数据库cookie。
如果我使用以下代码等待,边将准备好,我没有得到所有的cookie:
webDriverWait.until(webDriver -> "complete".equals((JavascriptExecutor) webDriver.executeScript("return document.readyState")))
我看到,如果我等待足够的时间,最终我会得到所有的cookie(保存在本地数据库中的常规cookie和userData cookie(。
有没有一种方法可以使用webDriverWait等待,直到加载所有cookie?
您永远不知道您的客户端是否加载了所有可能的cookie。因为如果您有异步UI,每个新请求都可能添加新的cookie或修改现有的cookie。
所以更好、更可靠;适当的";方法是首先知道您希望拥有哪些cookie。假设你把名字保存在Set<String> cookieNames
中。
然后你的等待看起来像:
webDriverWait.until(
webDriver -> {
Set<Cookie> cookies = webDriver.manage().getCookies();
return cookies.size() == cookieNames.size() &&
cookies.stream().allMatch(cookie -> cookieNames.contains(cookie.getName()));
}
);
或者如果您的前端正在使用Angular,您可以等待此脚本为true(意味着网站已完全加载(,然后可以继续使用您的脚本获取cookie:
return window.getAllAngularTestabilities().findIndex(x => !x.isStable()) === -1