Selenium - 登录并导航到不同的页面

时间:2017-12-26 12:39:24

标签: java selenium exception selenium-webdriver selenium-firefoxdriver

我想登录Facebook,然后打开一个特定的Facebook网址,以获取一个人员列表,为特定公司工作(例如,为了获得谷歌的员工,我需要转到https://www.facebook.com/search/str/google/pages-named/employees/present/intersect )我的第一个想法是简单地登录(工作正常),然后使用driver.navigate()转到特定页面。()

    FirefoxDriver driver = new FirefoxDriver();

    driver.get("https://www.facebook.com");

    WebElement emailElement = driver.findElementById("email");
    WebElement passwordElement = driver.findElementById("pass");

    emailElement.sendKeys("xxxx@xxxx.com");
    passwordElement.sendKeys("xxxx");

    emailElement.submit();

    driver.navigate().to("https://www.facebook.com/search/str/google/pages-named/employees/present/intersect");

然而,这样,facebook页面不可用,并且我被提示再次登录,即使该页面是在同一浏览器选项卡中打开的?!

第二个想法是先登录,获取cookie,然后使用这个cookie作为新驱动程序:

    FirefoxDriver driver = new FirefoxDriver();

    driver.get("https://www.facebook.com");

    WebElement emailElement = driver.findElementById("email");
    WebElement passwordElement = driver.findElementById("pass");

    emailElement.sendKeys("xxxx@xxxx.com");
    passwordElement.sendKeys("xxxxx");

    emailElement.submit();

    Set<Cookie> cookies = driver.manage().getCookies();

    FirefoxDriver driver2 = new FirefoxDriver();

    for (Cookie cookie : cookies) {
        Cookie cookieNew = new Cookie.Builder(cookie.getName(), cookie.getValue()).expiresOn(cookie.getExpiry())
                .isHttpOnly(cookie.isHttpOnly()).isSecure(cookie.isSecure()).path(cookie.getPath()).build();

        driver2.manage().addCookie(cookieNew);
    }
    driver2.get("https://www.facebook.com/search/str/google/pages-named/employees/present/intersect");

}

但是,这样会引发异常:org.openqa.selenium.InvalidCookieDomainException:Document是cookie-averse

我做错了什么?

2 个答案:

答案 0 :(得分:1)

我不认为将Cookie存储到to get a list of people, working for a specific company是强制性的。以下代码块在我身边很有效:

driver.findElement(By.cssSelector("input[value='Log In']")).click();
driver.get("https://www.facebook.com/search/str/google/pages-named/employees/present/intersect");
System.out.println(driver.getTitle());
driver.quit();

控制台输出:

Facebook Search

答案 1 :(得分:0)

应用第一个想法:
geckodriver设置Selenium Java可以解决我认为的问题。

需要将geckodriver路径设置为FirefoxDriver,如下所示:

System.setProperty("webdriver.gecko.driver", "PATH/TO/geckodriver.exe");
FirefoxDriver driver = new FirefoxDriver();
  

提交()之后,您需要使用等待功能刷新页面,如

emailElement.submit();      
//Use WebDriver wait.until() or sleep() to finish the submit action
driver.navigate().to("https://www.facebook.com/search/str/google/pages-named/employees/present/intersect");