2016-11-30 2 views
0

Ich erstelle ein automatisiertes Testprogramm mit webdriverjs einer Anwendung, wo die 'Next' Schaltflächen oft für eine Zeit deaktiviert und dann aktiviert sind. Die Automatisierung wartet darauf, dass die Schaltfläche aktiviert wird, und klickt dann auf die Schaltfläche.Was ist der beste Weg in Selenium WebDriver zu warten, bis Schaltflächen aktiviert sind?

Die Klasse eines Knopfes insbesondere schaltet ab: ‚BTN-next deaktiviert btn‘ zu

Ich habe kommen mit der folgenden Lösung, aber frage mich ‚BTN-next btn‘, wenn eine bessere Art und Weise war es?

browser.wait(until.elementLocated(By.css('nav a[class="btn btn-next"]')), 
timeout, 'button still disabled after timeout').then(function() { 
    browser.findElement(By.css('nav a[class="btn btn-next"]')).click(); 
}); 

Das scheint den Trick zu tun.

Ursprünglich war meine Idee Funktion auszuführen, wie:

tryToClick = function(element){ 
    var classValue = element.getAttribute("class"); 
    isDisabled = classValue.search('disabled') !== -1 ? true : false; 
    if(isDisabled){ 
    setTimeout(function() { 
     tryToClick(element); 
    }, 500); 
    } else { 
    element.click(); 
    } 
} 

jedoch Methoden wie Suche, Split, enthält, etc zu Fehlern geführt. Weiß jemand warum?

Antwort

0

Ich arbeite normalerweise in Java und C#, aber es sollte eine entsprechende Option in JS sein. Sie möchten eine explizite Wartezeit mit Until.ElementIsEnabled() ausführen.

Wenn es zu obigem wait..tiltil keine Entsprechung gibt, können Sie das Problem lösen, indem Sie anstelle der isDisabled-Variable element.isEnabled() == false verwenden. in deinem Code.

0

Funktionsname ist elementToBeClickable()

Beispiel:

WebDriverWait wait = new WebDriverWait(driver, 5); 
wait.until(ExpectedConditions.elementToBeClickable(By.css('nav a[class="btn btn-next"]'))); 
0

In Webdriver JS Sie until.elementIsDisabled oder until.elementIsEnabled

var theButton = driver.findElement(By.css('nav a[class="btn")); 
driver.wait(until.elementIsDisabled(theButton)), 10000, 'element is still enabled, sorry.').then(function(){ 
    theButton.click(); 
}); 

verwenden können, aber es sieht aus wie Sie eine ganze Klasse von Tasten auswählen, wenn Stellen Sie also sicher, dass Sie über sie iterieren und auf die gewünschte klicken, oder verwenden Sie css nth-child();

Verwandte Themen