2016-04-07 6 views
-1

Я новичок в селене. Я пытаюсь проверить приложение. Приложение имеет две страницы login.jsp, limited.jsp. Вы можете получить доступ к ограничению.jsp, только после входа в систему (попытка доступа к ограничению.jsp без входа будет перенаправлена ​​на страницу login.jsp). Мое применение селена как показано ниже.Selenium: функция печенья не работает

a. Вход в приложение сперва

b. После успешного входа в систему сохраните все файлы cookie в файле session.properties.

c. В следующий раз я загружаю все файлы cookie из «session.properties» в драйвер и пытаюсь получить доступ к странице «limited.jsp». Но я перенаправляю на login.jsp, а не на limited.jsp.

Ниже приведен код 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(); 
} 

}

Когда я раскомментировать строки loginApp (драйвер) ;, storeSessionProps (драйвер); все в порядке, я могу получить доступ к странице limited.jsp, но когда я запустил приложение, комментируя их и загружая куки-файлы, я перенаправляюсь на страницу login.jsp. Любая помощь по этому поводу?

ответ

1

Вам необходимо сохранить все данные из ваших файлов cookie, а не только имена/значения. Более того, перед созданием файла cookie необходимо загрузить страницу с доменом, который будет соответствовать домену cookie.

Это пример для быстрого сохранения и восстановления печенья:

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

Спасибо за ответ, это решить мою проблему. –

Смежные вопросы