Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Selenium test runs won't save cookies?

So I'm experimenting with Selenium automation, and I'm trying to write a testcase that logs in, goes to a specific page, inputs data, then presses submit. The issue is that when it runs, it types out the credentials, presses "Submit" the site returns:

This site uses HTTP cookies to verify authorization information. Please enable HTTP cookies to continue.

But then when I added this line [denoted by //1]:

driver.findElement(By.cssSelector("p > input[type=\"submit\"]")).click();

It allowed the login to go through until it gets to the send message page [denoted by //2], it asks for credentials again (as if no login was ever made). So is firefox not accepting cookies at all? How do I fix this?

Source:

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.JUnitCore;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;

import java.util.concurrent.TimeUnit;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;

public class LaPwn {
    private WebDriver driver;
    private String baseUrl;
    private boolean acceptNextAlert = true;
    private StringBuffer verificationErrors = new StringBuffer();
    private String UserID = "";
    private String UserPW = "";
    private String UserPIN = "";

    public static void main(String[] args) throws Exception {

        UserInfo User = new UserInfo();

        User.setUserInfo();

        System.out.println(User.getUserID());
        System.out.println(User.getUserPW());
        System.out.println(User.getUserPIN());


        JUnitCore.main("LaPwn");
    }

    @Before
    public void setUp() throws Exception {
        driver = new FirefoxDriver();
        baseUrl = "https://my_url.com";
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }

    @Test
    public void testLaPwn() throws Exception {
        driver.get(baseUrl + "/Login");
        //1
        driver.findElement(By.cssSelector("p > input[type=\"submit\"]")).click();
        //1
        driver.findElement(By.id("UserID")).clear();
        driver.findElement(By.id("UserID")).sendKeys("User.getUserID()");
        driver.findElement(By.name("PIN")).clear();
        driver.findElement(By.name("PIN")).sendKeys("User.getUserPW()");
        driver.findElement(By.cssSelector("p > input[type=\"submit\"]")).click();
        driver.findElement(By.id("apin_id")).sendKeys("User.getUserPIN()");
        driver.findElement(By.cssSelector("div.pagebodydiv > form > input[type=\"submit\"]")).click();

        //2
        driver.get(baseUrl + "/messagecenter");
        //2
        try {
            assertEquals("Send message:", driver.getTitle());
        } catch (Error e) {
            verificationErrors.append(e.toString());
        }
        driver.findElement(By.id("user")).clear();
        driver.findElement(By.id("user")).sendKeys("test123");
        driver.findElement(By.id("messg")).clear();
        driver.findElement(By.id("messg")).sendKeys("Hello test123!");
        driver.findElement(By.xpath("(//input[@name='SEND_BTN'])[2]")).click();
    }

    @After
    public void tearDown() throws Exception {
        driver.quit();
        String verificationErrorString = verificationErrors.toString();
        if (!"".equals(verificationErrorString)) {
            fail(verificationErrorString);
        }
    }

    private boolean isElementPresent(By by) {
        try {
            driver.findElement(by);
            return true;
        } catch (NoSuchElementException e) {
            return false;
        }
    }

    private boolean isAlertPresent() {
        try {
            driver.switchTo().alert();
            return true;
        } catch (NoAlertPresentException e) {
            return false;
        }
    }

    private String closeAlertAndGetItsText() {
        try {
            Alert alert = driver.switchTo().alert();
            String alertText = alert.getText();
            if (acceptNextAlert) {
                alert.accept();
            } else {
                alert.dismiss();
            }
            return alertText;
        } finally {
            acceptNextAlert = true;
        }
    }
}
like image 645
MK3GTX Avatar asked May 12 '13 03:05

MK3GTX


1 Answers

Based on your problem statement, the problem you are facing is that selenium is opening a fresh firefox profile where cookies are not enabled.

driver = new FirefoxDriver(); This is where you have to fix in such a way that it opens up a profile where cookies are enabled. One way is to create your own profile in firefox and open that profile instead of directly opening by FirefoxDriver();

ProfilesIni profileObj = new ProfilesIni();
FirefoxProfile yourFFProfile = profileObj.getProfile("your profile");
driver = new FirefoxDriver(yourFFProfile);

This way you can do what ever setting you need to in that profile and run your tests under that settings. If enabling cookies is the need, do that in firefox options.

Following is another way to open a specific profile as per seleniumhq.org

File profileDir = new File("path/to/top/level/of/profile");
FirefoxProfile profile = new FirefoxProfile(profileDir);
profile.addAdditionalPreferences(extraPrefs);
WebDriver driver = new FirefoxDriver(profile);

Check the source for more info on this topic. Source: http://docs.seleniumhq.org/docs/03_webdriver.jsp#modifying-the-firefox-profile

like image 173
Buddha Avatar answered Sep 20 '22 10:09

Buddha