【问题标题】:Not able to delete all cookies of current domain in Selenium webdriver无法在 Selenium webdriver 中删除当前域的所有 cookie
【发布时间】:2018-02-24 16:37:03
【问题描述】:

我正在使用 driver.manage().deleteAllCookies(); 方法开发 Selenium webDriver 但是这种方法是从当前域中删除所有cookie,除了一个。奇怪的!!

我现在正在使用 Chrome。

谁能建议可能的原因以及我们可以做些什么来删除当前域的所有 cookie?

【问题讨论】:

  • 它可能是一个子域cookie,也可能是AJAX调用在后台不断发生并且仍然添加一个新cookie。它可以区分安全和不安全的 cookie。这些是我能想到的点
  • 是的,它是由 AJAX 调用创建的 cookie,但在不同的域中。那么删除此 cookie 的理想方法是什么?
  • 您必须浏览该域的位置,然后只有删除 cookie 才有效。删除 cookie 只会删除当前站点的 cookie

标签: java selenium cookies webdriver


【解决方案1】:
driver.manage().deleteAllCookies();

这只会删除当前域上的 cookie。它不会删除任何其他域的 cookie。

因此,如果您需要删除这些域的 cookie,那么您需要先浏览到该域中的页面,然后再次调用 deleteAllCookies 方法

【讨论】:

    【解决方案2】:

    我必须等待所有 ajax 操作完成然后调用 deleteAllCookies(),然后它才起作用。

    public void ajaxWait(long seconds) {
        try{
            while(!waitForJSandJQueryToLoad()) {
                try {
                    Thread.sleep(1000);
                    seconds -= 1;
                    if (seconds <= 0) {
                        return;
                    }
                } catch (InterruptedException var4) {
                    var4.printStackTrace();
                }
            }
        } catch(Exception e){
            e.printStackTrace();
        }
    }
    
    public boolean waitForJSandJQueryToLoad() {
    
        WebDriverWait wait = new WebDriverWait(driver, 20);
    
        // wait for jQuery to load
        ExpectedCondition<Boolean> jQueryLoad = new ExpectedCondition<Boolean>() {
            @Override
            public Boolean apply(WebDriver driver) {
                try {
                    return ((Long)((JavascriptExecutor)driver).executeScript("return jQuery.active") == 0);
                }
                catch (Exception e) {
                    // no jQuery present
                    e.printStackTrace();
                    return true;
                }
            }
        };
    
        // wait for Javascript to load
        ExpectedCondition<Boolean> jsLoad = new ExpectedCondition<Boolean>() {
            @Override
            public Boolean apply(WebDriver driver) {
                return ((JavascriptExecutor)driver).executeScript("return document.readyState")
                        .toString().equals("complete");
            }
        };
    
        return wait.until(jQueryLoad) && wait.until(jsLoad);
    }
    

    【讨论】:

    • 这很复杂,但等待所有内容加载的想法是正确的
    【解决方案3】:

    我有同样的问题。我想退出系统。我以为我已经通过调用删除了所有 cookie:

    driver.manage().deleteAllCookies();
    

    然而,声明完成后,系统将我导航到主页。

    我的解决方案是导航到登录页面,然后再次删除 cookie:

    driver.get(target_url);
    driver.manage().deleteAllCookies();
    

    【讨论】:

      猜你喜欢
      • 2013-04-14
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      相关资源
      最近更新 更多