2016-04-07 2 views
-1

Je suis nouveau pour le sélénium. J'essaie de tester une application. L'application a deux pages login.jsp, restricted.jsp. Vous pouvez accéder à restricted.jsp, seulement après vous être connecté (essayer d'accéder à restricted.jsp sans connexion redirigera vers la page login.jsp). Mon application de sélénium est comme ci-dessous.Selenium: la fonctionnalité cookie ne fonctionne pas

a. Se connecter à l'application en premier

b. Après une connexion réussie, stockez tous les cookies dans le fichier "session.properties".

c. La prochaine fois, je charge tous les cookies de "session.properties" vers le pilote et j'essaie d'accéder à la page "restricted.jsp". Mais je redirige vers login.jsp, au lieu de restricted.jsp.

Voici mon code Java.

public class App { 

private static void loginApp(WebDriver driver) { 
    driver.get("http://localhost:8080/selenium_app/login"); 

    WebElement userName = driver.findElement(By.name("userName")); 
    WebElement password = driver.findElement(By.name("password")); 

    userName.sendKeys("admin"); 
    password.sendKeys("admin"); 

    userName.submit(); 
} 

private static void storeSessionProps(WebDriver driver) throws IOException { 
    File f = new File("session.properties"); 
    f.delete(); 
    f.createNewFile(); 

    FileWriter fos = new FileWriter(f); 
    BufferedWriter bos = new BufferedWriter(fos); 

    /* Get all the cookies and store them to session.properties file */ 
    Set<Cookie> cookies = driver.manage().getCookies(); 
    for (Cookie cookie : cookies) { 
     bos.write(cookie.getName() + "=" + cookie.getValue()); 
     bos.newLine(); 
    } 

    bos.flush(); 
    bos.close(); 
    fos.close(); 
} 

private static void loadPropertiesToDriver(WebDriver driver) 
     throws IOException { 
    Properties properties = new Properties(); 
    FileInputStream fin = new FileInputStream("session.properties"); 

    properties.load(fin); 

    Set<Object> props = properties.keySet(); 

    for (Object prop : props) { 
     Cookie ck = new Cookie((String) prop, 
       properties.getProperty((String) prop)); 
     driver.manage().addCookie(ck); 
     System.out.println(ck); 
    } 
} 

public static void main(String[] args) throws InterruptedException, 
     IOException { 
    WebDriver driver = new FirefoxDriver(); 

    // loginApp(driver); 
    // storeSessionProps(driver); 

    loadPropertiesToDriver(driver); 
    driver.get("http://localhost:8080/selenium_app/restricted"); 
    Thread.sleep(5000); 

    driver.quit(); 
} 

}

Quand je décommenter les lignes loginApp (pilote) ;, storeSessionProps (conducteur); tout va bien, je suis en mesure d'accéder à la page restricted.jsp, mais quand j'ai couru l'application en les commentant et en chargeant les cookies, je redirige vers la page login.jsp. Toute aide à ce sujet?

Répondre

1

Vous devez stocker toutes les données de vos cookies, pas seulement les noms/valeurs. De plus, avant de créer un cookie, vous devez charger une page avec un domaine correspondant au domaine du cookie.

Voici un exemple pour stocker rapidement et restaurer les biscuits:

Path cookiesFile = Paths.get("C:\\Temp\\cookies.txt"); 

WebDriver driver = new FirefoxDriver(); 
JavascriptExecutor js = (JavascriptExecutor)driver; 

// load the domain 
driver.get("https://www.google.com"); 

if(cookiesFile.toFile().exists()) { 

    // load the cookies into the browser for the current domain 
    String cookies = new String(Files.readAllBytes(cookiesFile), Charsets.UTF_8); 
    js.executeScript(cookies); 

    // reload the page with the injected cookies 
    driver.get("https://www.google.com"); 
} 

// save the cookies to a file for the current domain 
try(PrintWriter file = new PrintWriter(cookiesFile.toFile(), "UTF-8")){ 
    for(Cookie c : driver.manage().getCookies()) { 
     file.println("document.cookie='" + c.toString() + "';"); 
    } 
} 
+0

Merci pour la réponse, il résolu mon problème. –