2017-07-10 2 views
0

Ich habe eine angularjs Webseite, die auffordert, wenn ich bestimmte Aktionen auf der Seite ausführen. Der Code sollte ignoriert und fortgesetzt werden, wenn keine Eingabeaufforderung angezeigt wird. Wenn jedoch eine Eingabeaufforderung angezeigt wird, stellen Sie sicher, dass die JavaScript-Eingabeaufforderung akzeptiert wird.Handhabung angularjs Dialogfeld in Web-Seite mit Selenium

Wenn ich Firebug verwende, bekomme ich die folgende Eigenschaft des Elements. /html/body/div [2]

Die div [Nummer] ändert sich, wenn ich auf diese Seite gehe.Ich kann nicht dasselbe in XPath verwenden, wie immer wenn der Testfall ausgeführt wird, das Div-Element würde ändern. Auch das div hat ein Attribut von tabindex = -1.

bool status = false; 
     WebDriverWait wait = new WebDriverWait(webDriver, TimeSpan.FromSeconds(10)); 
     IWebElement alert; 

     if (wait.Until(ExpectedConditions.InvisibilityOfElementLocated((By.XPath("/html/body/div[2]") 
     { 
      Console.WriteLine("I am in if loop"); 
      status = false; 
     } 
     else 
     { 
      Console.WriteLine("I am in else loop"); 
      alert = Browser.Driver.FindElement(By.XPath("/html/body/div[2]")); 
      ((IJavaScriptExecutor)webDriver).ExecuteScript("arguments[0].click()", alert); 
      status = true; 
     } 

     return status; 

Wie gehe ich mit einem solchen Dialogfeld um und stelle sicher, dass das gleiche akzeptiert wird, wenn es angezeigt wird.

Danke.

Image of the Angular JS dialog box

+0

Zuerst überprüfen Sie bitte, ob es ein modales Fenster, eine Warnung oder ein div ist? Basierend darauf könnte sich die Lösung ändern. Zum Ändern von xpath können Sie entweder einen 'CSS'-Selektor (von Selenium empfohlen) oder die' contains'-Methode verwenden, wie in der Antwort unten erwähnt. Bitte fügen Sie relevantes HTML hinzu, da dies die Bereitstellung einer Lösung erleichtern würde. – demouser123

Antwort

0

Sie können den XPath mit dem Titel der Warnung abzuleiten. Kann wie unten sein. (Ich weiß nicht, die genaue html, nur den Header-Text vorstellen, ist in einem gewissen span-Tag)

alert = Browser.Driver.FindElement(By.XPath("/html/body//div/span[contains(text(),'Apply changes to controller configuration')]"));

(//) kann vermeiden, dass Ihr div-Tag-Index.

+0

Woher wissen Sie, dass es ein Alarm- und kein modales Fenster ist? Oder ein separates div? – demouser123

Verwandte Themen