2013-05-12 11 views
6

Quindi sto sperimentando l'automazione di Selenium e sto provando a scrivere una testcase che accede, va a una pagina specifica, immette i dati, quindi preme submit. Il problema è che quando viene eseguito, digita le credenziali, preme "Invia" il sito restituisce:Il test del selenio non salverà i cookie?

Questo sito utilizza i cookie HTTP per verificare le informazioni di autorizzazione. Abilita i cookie HTTP per continuare.

Ma poi quando ho aggiunto questa linea [indicata con // 1]:

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

ha permesso il login per passare attraverso fino a quando si arriva alla pagina di messaggio di invio [indicato con // 2] , chiede di nuovo le credenziali (come se non fosse mai stato effettuato il login). Quindi Firefox non accetta affatto i cookie? Come posso risolvere questo?

Fonte:

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; 
     } 
    } 
} 
+0

Hai provato ad aggiungere un po 'di attesa lì? – acdcjunior

risposta

8

Sulla base della sua dichiarazione del problema, il problema che si trovano ad affrontare è che il selenio è l'apertura di un profilo di Firefox fresco in cui i cookie non sono abilitati.

driver = new FirefoxDriver(); Qui è dove è necessario risolvere in modo tale da aprire un profilo in cui i cookie sono abilitati. Un modo è creare il proprio profilo in firefox e aprire quel profilo invece di aprire direttamente da FirefoxDriver();

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

In questo modo è possibile eseguire le impostazioni che è necessario in quel profilo ed eseguire i test con tali impostazioni. Se l'abilitazione dei cookie è necessaria, fallo nelle opzioni di Firefox.

seguito è un altro modo per aprire un profilo specifico come da 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); 

Controllare la sorgente per maggiori informazioni su questo argomento. Fonte: http://docs.seleniumhq.org/docs/03_webdriver.jsp#modifying-the-firefox-profile

+0

Per visualizzare/creare profili in Windows, è possibile individuare firefox.exe. Aprire un prompt dei comandi nella posizione firefox.exe ed eseguire firefox.exe -ProfileManager per aprire una piccola finestra per la gestione dei profili. Suggerimento: Firefox si trova di solito in "C: \ Programmi (x86) \ Mozilla Firefox \ firefox.exe" o "C: \ Programmi \ Mozilla Firefox \ firefox.exe". Con la cartella aperta, fai clic con il tasto destro del mouse su un'area bianca e scegli "Apri finestra di comando qui". Nella risposta di Buddha, cercherà un profilo chiamato "il tuo profilo". – weezilla

1

realtà ho realizzato ho definito l'URL di base come

baseUrl = "https://my_url.com/"; 

ed è stato concatenando le cose come:

driver.get(baseUrl + "/Login"); 

per "https://my_url.com//Login". Grazie per il tuo replay però!

+0

+1 grazie - è stato incredibilmente semplice, ho provato tutto il resto per risolvere questo per oltre un paio di giorni :) – msanjay

Problemi correlati