ritorna un riferimento pagina come risultato dell'azione sulla pagina?

sto usando LoadableComponent<T> in un progetto di test di selenio. ho un'applicazione con una pagina principale (modellata come MainPage.java) dalla quale vado alla pagina di login (LoginPage). inserisco alcune credenziali e il modulo di login mi reindirizza (se le credenziali sono valide) al MainPage di nuovo, abilitando alcune funzionalità extra. poiché uso MainPage come punto di partenza per molti test, Ho dovuto implementare load() metodo per MainPage con un URL valido. quindi, se sto facendo qualcosa come:

MainPage mainpage=new MainPage();
mainpage.get();
LoginPage loginPage=mainpage.clickLogin();
loginPage.setUser("whatever").setPassword("totally_secret");
mainpage = loginPage.clickJoin();
mainpage.get();

non posso essere sicuro se l'azione che mi indirizza al mainpage sia riuscita o meno, perché comunque, l'ultima chiamata caricherà la pagina. d'altra parte, se chiamo clickJoin() metodo senza assegnare l'oggetto restituito ad una variabile, non posso validare se la pagina corretta viene caricata e non posso ottenere un riferimento ai suoi metodi per continuare il test. potrei anche fare clickJoin() metodo ritorno vuoto, ma poi come faccio a ottenere il riferimento alla nuova pagina nel test? come devo affrontarlo?


En title : Return a page reference as result of action on page?

4 Comments:

  1. perché anche chiamare mainpage.get() dopo loginPage.clickJoin()? l'interazione con gli elementi della pagina non ti porterebbe alla successiva / precedente?

    in generale, si dovrebbe essere in grado di interagire con l'oggetto mainPage restituito da clickJoin() subito. non è necessario chiamare di nuovo get(). se si sta ottenendo errori senza di essa, è probabilmente a causa del codice di esecuzione troppo veloce, senza in realtà in attesa che la pagina per caricare correttamente.

    per evitare questo, è possibile avere il metodo loginPage.clickJoin() assicurarsi che la pagina principale ha caricato di nuovo.

    public MainPage clickJoin() {
    
        joinLink.click(); //clicking some link/button or whatever should take you to the page
    
        new WebDriverWait(driver, timeToWait).until(
           //here you can use the ExpectedConditions class to wait for the title 
           //to change to a specified value or something similar. There's a wide
           //variety of methods provided. Alternatively, you can implement the
           // ExpectedCondition interface yourself
        );
        return new MainPage(driver);
    }
    

    se la pagina non riesce a caricare, si otterrà un'eccezione e il test fallirà.

    non è necessario farlo esattamente allo stesso modo come nello pseudocodice di cui sopra, ma un WebDriverWait sembra un modo per assicurarsi che le pagine giuste caricare durante la navigazione tra di loro.

    1. hai ragione, non chiamare get e fare un'attesa ha fatto il trucco. non stavo aspettando e questo mi ha portato ad una conclusione sbagliata.
  2. non so che sono al 100% chiaro su esattamente quello che stai chiedendo, ma ecco quello che penso di fare. i vostri metodi pubblici sugli oggetti delle pagine dovrebbero essere più rappresentativi delle operazioni dell'utente (registrazione con successo), piuttosto che delle singole azioni (compilazione di un singolo campo).

    ho aggiunto un flag loggedIn al costruttore della pagina principale, che può essere utile per determinare quali azioni sono / dovrebbero essere disponibili

    class MainPage {   
        public MainPage(bool loggedIn) {
          ...
        } 
    }
    
    class LoginPage {   
        public LoginPage(){
           ...
        }
    
        public MainPage loginExpectSuccess(string username, string password) {
            setUser(username);
            setPassword(password);
            clickJoin();
    
            return new MainPage(true);
        }
    
        public LoginPage loginExpectFailure(string username, string password) {
            setUser(username);
            setPassword(password);
            clickJoin();
    
            return this;
        } 
    
        private void setUser(string username) {
            ...
        }
    
        private void setPassword(string password) {
            ...
        }
    
        private void clickJoin() {
            ...
        }
    }
    

    in questo modo, il test può essere semplificato:

    MainPage mainpage = new MainPage(false);
    LoginPage loginPage=mainpage.clickLogin();
    mainpage = loginPage.loginExpectSuccess("whatever", "totally_secret");
    ...
    mainpage.nextUserAction(); //Do whatever a logged in user should be able to do, if user is not actually logged in successfully this will fail
    

More similar articles:

  • come posso mettere in variabile elementi seguente-fratello, con selenio?
  • come controllare il caricamento della pagina se ho più di 50 pagine
  • azione Move Dosnt lavoro con: versioni di Firefox: 48 e selenio: 3.0.1
  • selenio driver clic voce poi reindirizzato alla nuova pagina e cerca di trovare la stessa voce della pagina precedente
  • WebDriver gettext () di un elemento ritorna vuoto
  • non riesce a trovare elemento utilizzando Selenio WebDriver
  • come impostare proxy multipli in Selenium WebDriver Java
  • WebDriver/Selenium 2.0 API non funziona con Firefox 4
  • come gestire automatizzato UI codice di test per i diversi browser?
  • come aprire una nuova finestra invece di nuova scheda in cromo utilizzando WebDriver?
  • selenio, aspetta elemento, modello oggetto pagina, c # attacchi
  • qual è il significato esatto di webdriver.chrome.driver e dove si trova questa proprietà del sistema?
  • come testare la vulnerabilità di XSS utilizzando Selenium WebDriver?
  • errore: il percorso verso l'eseguibile del driver deve essere impostato dalla proprietà del sistema webdriver.ie.driver
  • l'avviso di testo d'area d'impiego non si congeda nel test d'Esploratore d'Internet SeleniumPlus
  • non è possibile inizializzare pagina di fabbrica in selenio
  • come ottenere il numero di elementi trovati usando Selenium WebDriver con Python?
  • non sempre fare clic sulla casella di controllo
  • casi di test saltati con WebDriver Selenio usando il framework TestNG
  • casuale "Elemento non è più attaccato al DOM" StaleElementReferenceException
  • come eseguire il @Test dopo aver lanciato un'eccezione al selenio WebDriver
  • come posso fare clic su elemento che appers quando ho il mouse sopra?
  • gettext () ritorna vuoto
  • e 'possibile eseguire regressione con Selenio WebDriver?
  • java.awt.Robot non funziona per la gestione di "File Upload" finestra di dialogo quando eseguito tramite Jenkins lavoro
  • esecuzione di test paralleli in un framework guidato da parole chiave Selenium
  • scaricare un file in Microsoft Edge attraverso Selenio
  • XPath - come trovare informazioni
  • selenio/WebDriver test tempo di esecuzione raddoppiato dopo l'aggiornamento a 2.45
  • come posso attendere in modo affidabile gli avvisi JavaScript utilizzando Selenium2/WebDriver?