2013-03-11 11 views
21

Ho problemi con PHPUnit_Selenium a Opera. Se ho fatto clic su un elemento nel mio codice di test, la pagina non verrà caricata. In altri browser come Firefox, IE, Chrome e Safari, funziona correttamente.PHPUnit Selenio, clickAndWait() non funziona in Opera

Codice:

$browser->clickAndWait(link); 

E 'prossimi passi da selenio telecomando:

click(link) 
waitForPageToLoad(120000) 

Dopo il timeout, se clicco sul link del browser la pagina viene ricaricata.

devo Selenio RC v. 2.31.0 e Opera versione 12.41, ma i test anche su Opera 11.50.

Avete qualche idea di cosa c'è che non va?

+0

fatto si cerca tracker selenio bug? – cweiske

+0

Sì, ho cercato sul tracker di selenio, ma non ho trovato per risolvere il mio problema. – Szymon

+0

È possibile che il collegamento sia associato a un evento Javascript che non viene gestito correttamente da Opera? Puoi eseguire il link cliccando a mano su Opera? –

risposta

0

Nel post originale non c'erano abbastanza informazioni per suggerire una soluzione definitiva, ma collegandosi con il commento @Andre fornito, i browser "disinfettanti" fanno, e a loro volta forniscono in funzioni come "Copia xPath" può essere molto fuorviante e portare a molti problemi durante il test, a seconda della struttura di xPath.

Ad esempio:

<html> 
    <head></head> 
    <body> 
     <div> 
      <table> 
       <tr> 
        <td>test</td> 
       </tr> 
       <tr> 
        <td>value</td> 
       </tr> 
      </table> 
     </div> 
    </body> 
</html> 

Mentre il codice di cui sopra è molto minimale, i browser riporterà XPath di test come uno dei seguenti:

  • /html/corpo/div/table/tr/td (che in molti casi lo restituisca sia di test e il valore)
  • /html/corpo/div/table/tr [1]/td [1] (una corrispondenza più precisa di prova solo)
  • /html/body/div/table/tbody/tr/td (no tice aggiunto)

E così via. Ovviamente, non ti imbatti in questo problema con un identificatore univoco più disponibile (IE un id -> // * [@ id = "someElement"]), ma in molti progetti abbiamo preso il sopravvento, dove sono stati effettuati i test unitari originariamente fatto solo su un browser, che abbiamo visto errori simili a quello riportato, e si è rivelato il browser "igienizzanti" fanno creare uno dei due problemi:

  • il percorso è stato recuperato in un browser "sterilizzata ", e quindi eseguire su un browser che non avrebbe trovato e non poteva trovare l'elemento.
  • Il percorso è stato recuperato su un browser che non è stato "disinfettato" e quindi eseguito su un browser che disinfetta.

Entrambe le questioni risultanti in un non-partita.

0

Ho avuto problemi simili e, purtroppo, unica soluzione mi è venuta è stata ... l'aggiunta di 'sonno'. Brutto, ma funziona.

-1

Dopo click qualcosa di pop-up o la creazione, basta chiamare dopo la funzione click "waitForElementPresent" o "waitForChange".

clickAndWait = click() + qualche funzione di attesa funzione Wait .... buona pratica viene utilizzato prima di cliccare, che si salva in chiamate asincrone.

selenium.waitForElementPresent(“myFooElement”); 
selenium.click(“myFooElement”); 
1

ho avuto questo problema in FF così, questa è stata la soluzione che mi si avvicinò con:

def wait_for_element_by_id(eid): 
    "Wait for an element to be present" 
    element = WebDriverWait(driver, 10).until(
     EC.presence_of_element_located((By.ID, eid)) 
    ) 
    return []