2016-11-29 7 views
2

Ich habe Sikuli mit meinem Selenium-Projekt integriert. Aus Gründen des Lernens habe ich eine einfache Gmail-Login-Anwendung verwendet, um sie mit Sikuli zu automatisieren. Nun, ich kann Skript ausführen. Sagen wir mal, ich tippe etwas in mein Benutzername-Feld. Und manchmal wird die Maus nicht auf das Feld Benutzername verschoben. Meine Testskripte sind also fehlgeschlagen. Und es ist intermittierendes Verhalten.Intermittierender Ausfall von Sikuli

public static void main(String[] args) throws Exception { 

    Screen screen = new Screen(); 

    Pattern pattern1 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\UserName.PNG"); 
    Pattern pattern2 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\Password.PNG"); 
    Pattern pattern3 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\SignIn.PNG"); 
    Pattern pattern4 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\Next.PNG"); 
    Pattern pattern5 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\SignedIn.PNG"); 
    Pattern pattern6 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\SentMail.PNG"); 
    Pattern pattern7 = new Pattern("E:\\Projects\\Java\\Demo\\Images\\SentMessage.PNG"); 

    System.setProperty("webdriver.chrome.driver","E:\\Projects\\Java\\Demo\\Drivers\\chromedriver.exe"); 
    WebDriver driver = new ChromeDriver(); 
    driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS); 
    driver.navigate().to("https://www.gmail.com"); 
    driver.manage().window().maximize(); 
    screen.type(pattern1,"email id"); 
    screen.click(pattern4); 
    screen.type(pattern2,"password"); 
    screen.click(pattern5); 
    screen.click(pattern3); 
    screen.wait(pattern6,20); 
    screen.click(pattern6); 
    screen.wait(pattern7,5); 
    screen.click(pattern7); 
} 

Hat jemand eine Idee, warum dies geschieht?

+0

bitte posten, was Code, den Sie können uns helfen, diese Situation zu debuggen, wenn Sie erstellen ein http://jsfiddle.net erhalten Sie die gleichen Probleme? – haxxxton

+0

@haxxxxton - Ich habe meinen Code auch aktualisiert – Aishu

Antwort

0

Teilen Sie zuerst Ihren Code.

Normalerweise wird intermittierendes Verhalten, wie Sie es beschreiben, durch Timeouts verursacht. Das heißt, dass Sie nach einem Element suchen, das noch nicht da ist oder noch nicht stabil ist.

Ein praktisches Beispiel in Ihrem Szenario kann versuchen, das Feld Benutzername zu erkennen, bevor die Seite vollständig geladen wurde. Es wird nützlich sein zu wissen, wie Sie beide Werkzeuge benutzt haben. Was hast du für die Navigation verwendet und was für die Elementidentifikation?

Sagen, dass der schnellste Weg, um zu versuchen, dieses Problem zu lösen, ist es, einige Sekunden Verzögerung, bevor Sie mit der Suche nach Benutzernamen Element. Schau, ob dir das hilft.

EDIT Nun, wenn Sie Ihren Code geschrieben haben, haben einen Blick auf diese beiden Zeilen:

driver.manage().window().maximize(); 
screen.type(pattern1,"email id"); 

Hier legen Sie das Browser-Fenster maximieren und sofort versuchen, in das Element beschrieben zu finden und geben nach pattern1. Dies ist wahrscheinlich ein Problem, da Ihre driver Instanz nicht darauf wartet, dass das Fenster maximiert wird und der nächste Befehl sofort ausgeführt wird. Sie sollten etwas Zeit einplanen, um sicherzustellen, dass das Fenster die Größenänderung abgeschlossen hat. Fügen Sie einfach einen kurzen Schlaf zwischen diese Zeilen hinzu und sehen Sie, ob das hilft.

+0

Ich habe meinen Code hier aktualisiert. Wie gesagt, ich sehe immer noch dieses intermittierende Verhalten – Aishu

+0

@Aishu Schau dir meine Bearbeitung an. –

0

Da es intermittierend passiert und für die allererste Aktion in einem neu gezeichneten Bildschirm auftritt, sieht dies wie ein Timing-Problem aus.
Die Sikuli-Lösung ist hier zu warten, bis Ihr Eingabefeld verfügbar ist, bevor Sie es verwenden.

Die Anweisung zu verwenden ist:

wait(pattern1[, seconds]) 

Insert kurz vor:

screen.type(pattern1,"email id"); 

Referenz:
http://doc.sikuli.org/region.html#Region.wait