2013-03-11 9 views
21

Ich habe ein Problem mit PHPUnit_Selenium in Opera. Wenn ich in meinem Testcode auf Element geklickt habe, wird die Seite nicht geladen. In anderen Browsern wie Firefox, IE, Chrome und Safari funktioniert es korrekt.PHPUnit Selen, clickAndWait() Funktion funktioniert nicht in Opera

Code:

$browser->clickAndWait(link); 

Es ist die nächsten Schritte von SELENIUM der Fernbedienung:

click(link) 
waitForPageToLoad(120000) 

Nach Ablauf dieser Zeit, wenn ich auf den Link klicken in Browser die Seite neu geladen wird.

Ich habe Selenium RC v. 2.31.0 und Opera Version 12.41, aber ich teste auch auf Opera 11.50.

Haben Sie eine Idee was falsch ist?

+0

haben Sie den Selen Bug-Tracker gesucht? – cweiske

+0

Ja, ich habe auf Selen Bug Tracker gesucht, aber ich habe nicht gefunden, um mein Problem zu lösen. – Szymon

+0

Ist es möglich, dass die Verknüpfung an ein Javascript-Ereignis gebunden ist, das von Opera nicht ordnungsgemäß verarbeitet wird? Können Sie den Link per Mausklick auf Opera ausführen? –

Antwort

0

Es gab nicht genug Informationen in der ursprünglichen Post, um eine endgültige Lösung vorzuschlagen, aber binden mit dem Kommentar @Andre vorausgesetzt, die "Bereinigung" Browser tun, und wiederum in Funktionen wie "Copy xPath" können sind sehr irreführend und führen zu vielen Problemen beim Testen, abhängig von der Struktur des xPath.

Zum Beispiel:

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

Während der obige Code sehr minimal ist, Browser der xPath des Tests als eine der folgenden Bericht:

  • /html/body/div/table/tr/td (was in vielen Fällen sowohl Test als auch Wert zurückliefert)
  • /html/body/div/table/tr [1]/td [1] (genauer gesagt, um nur zu testen)
  • /html/body/div/table/tbody/tr/td (Nr tice the added tbody)

Und so weiter. Offensichtlich stoßen Sie nicht auf dieses Problem mit einer eindeutigeren Kennung (IE eine ID -> // * [@ id = "someElement"]), aber in vielen Projekten, die wir übernommen haben, wo die Unit-Tests waren ursprünglich nur auf der einen Browser getan, haben wir Fehler ähnlich dem berichtet gesehen, und es stellte sich heraus, die „Hygienisierung“ Browser eine von zwei Probleme schaffen machen:

  • der Pfad auf einem Browser abgerufen wurde, dass „hygienisiert "und dann auf einem Browser laufen, der das Element nicht finden konnte und konnte.
  • Der Pfad wurde in einem Browser abgerufen, der nicht "bereinigt" wurde, und dann in einem Browser ausgeführt, der bereinigt.

Beide Probleme führen zu einer Nichtübereinstimmung.

0

Ich hatte ähnliches Problem und, leider, nur die Lösung, die ich kam, war ... Hinzufügen 'Schlaf'. Hässlich, aber funktioniert.

-1

Nach einem Klick auf etwas Popup oder Erstellen, brauchen Sie nur Call-for-Click-Funktion "waitForElementPresent" oder "waitForChange".

clickAndWait = klicken() + einige Wait-Funktion .... gute Praxis ist die Wait-Funktion vor dem Klicken, die Sie in Async-Aufrufe speichern.

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

Ich war auch in FF dieses Problem hat, das war die Lösung, die ich mit aufkam:

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 [] 
Verwandte Themen