2016-07-19 34 views
0

Beim Generieren Code aus Selenium, warten Sie Befehle wie clickAndWait generieren Sie eine peinliche Muster mit einer Schleife.Selenium IDE generiert Code nicht mit WebDriverWait.Until

Wäre es nicht besser, eine WebDriverWait.until zu verwenden?

Oder bekomme ich etwas falsch?

UPDATE: Entschuldigung, schrieb aus dem Speicher, der Code, den ich bezog, ist auf dem waitForElement Befehl und nicht clickAndWait.

Dies ist der Code, den ich zu beziehen bin:

// waitForElementPresent | id=id |    
for (int second = 0; ; second++) 
{ 
    if (second >= 60) Assert.Fail("timeout"); 
    try 
    { 
     if (IsElementPresent(By.Id("id"))) break; 
    } 
    catch (Exception) 
    { } 
    Thread.Sleep(1000); 
}  

private bool IsElementPresent(By by) 
{ 
    try 
    { 
     driver.FindElement(by); 
     return true; 
    } 
    catch (NoSuchElementException) 
    { 
     return false; 
    } 
} 

Lese verschiedene Führungen und andere Antworten, wie es mir scheint, dass eine bessere Lösung dieser sein würde:

// waitForElementPresent | id=id |    
if (!WaitForElementPresent(By.Id("id"))) { Assert.Fail(); } 

private bool WaitForElementPresent(By by) 
{ 
    var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60)); 
    try 
    { 
     wait.Until(drv => drv.FindElement(by)); 
     return true; 
    } 
    catch (Exception) 
    { 
     return false; 
    } 
} 
+0

Was meinst du etwas falsch gemacht ?? Könntest du mehr mit Beispielcode ausdrücken ?? –

+0

Clarified die Frage, es gab auch einen Fehler, ich bezog mich auf ClickAndWait Typ Befehle, während es auf WaitForElement Befehle war – SilverXXX

+0

Und ist das Problem mit diesem ??? Ich meine, gibt es irgendeinen Fehler ?? –

Antwort

0

Ja, mit WebDriverWait ist der bessere Ansatz, auf Element zu warten, aber statt eigene benutzerdefinierte ExpectedConditions zu erstellen, sollten Sie Selen ExpectedConditions.ElementExists Funktion verwenden, um zu warten, bis Element wie folgt existieren: -

var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60)); 
IWebElement el = wait.Until(ExpectedConditions.ElementExists(by)); 

Hoffe, es hilft .. :)

+0

Danke für den Tipp über ExpectedConditions, wusste nicht darüber. Wissen Sie, ob Sie den Standardexporteur ändern können? – SilverXXX

+0

@SilverXXX Es tut mir leid..ich habe nicht verstanden, was fragst du? –

+0

Jetzt, wenn wir einen Test in Selenium haben und "Testfall exportieren als ... -> C#/NUnit/WebDriver" verwenden, wird die erste Version mit einem Zyklus in der Testmethode generiert. Gibt es eine Möglichkeit, es zu ändern, so dass das zweite erzeugt wird? (oder sogar einen neuen Export hinzufügen) – SilverXXX