Qualcuno sa come aspettare che un WebElement sia selezionabile in WebDriverJS? So già come aspettare che l'elemento sia "visibile", ma avrei bisogno che fosse "cliccabile" .. Qualcosa di simile a expectable conditions in collegamento Python. Non sono stato in grado di trovare qualcosa di simile in Webdriver Js API.Come posso attendere che un elemento sia selezionabile in WebDriverJS?
risposta
Non sembra esserci una condizione equivalente a selenium.webdriver.support.expected_conditions.element_to_be_clickable
di Python. Tuttavia, osservando la fonte per tale condizione, vedo che esegue due controlli:
Che l'elemento sia visibile.
Che sia abilitato.
Quindi è possibile attendere che entrambe le condizioni diventino vere. Il seguente codice illustra come ciò potrebbe essere fatto. Prima rende invisibile un elemento e lo disabilita, imposta alcuni timeout per renderlo visibile e abilitarlo, quindi attendi che le due condizioni si verifichino.
var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder().
withCapabilities(webdriver.Capabilities.chrome()).
build();
driver.get('http://www.google.com');
// This script allows testing the wait. We make the element invisible
// and disable it and then set timeouts to make it visible and enabled.
driver.executeScript("\
var q = document.getElementsByName('q')[0];\
q.style.display = 'none';\
q.disabled = true;\
setTimeout(function() {\
q.style.display = '';\
}, 2000);\
setTimeout(function() {\
q.disabled = false;\
}, 3000);\
");
driver.findElement(webdriver.By.name('q')).then(function (element) {
driver.wait(function() {
return element.isDisplayed().then(function (displayed) {
if (!displayed)
return false;
return element.isEnabled();
});
});
element.sendKeys('webdriver');
});
driver.findElement(webdriver.By.name('btnG')).click();
driver.wait(function() {
return driver.getTitle().then(function(title) {
return title === 'webdriver - Google Search';
});
}, 1000);
driver.quit();
Il codice potrebbe sembrare un po 'strano a causa del fatto che stiamo lavorando con promesse. Non che le promesse siano intrinsecamente strane ma ci vuole un po 'di tempo per abituarsi a quando si è abituati a lavorare con Python.
Fantastico che controlli il comportamento sull'API di python! Se questo è il caso, il problema è risolto! : D –
QUESTA è la spiegazione che stavo cercando da un mese! Ho usato '.isEnabled()' e ho eseguito 100 test e tutti sono passati, mentre prima era al tasso di passaggio del 90%. Spero che gli altri trovino questa risposta. Grazie mille @Louis –
FINO sembra essere la cosa più vicina a js WebDriver per questo:
Controlla: https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/until.html
Ci sono già definiti in attesa condizioni lì. Non so quale dovrebbe essere considerato cliccabile.
Grazie hanno appena cambiato il link nel commento! –
Se non si cura di clic sull'oggetto una volta che è disponibile ** allora si può fare qualcosa di simile:
function clickWhenClickable(locator, timeout){
driver.wait(function(){
return driver.findElement(locator).then(function(element){
return element.click().then(function(){
return true;
}, function(err){
return false;
})
}, function(err){
return false;
});
}, timeout, 'Timeout waiting for ' + locator.value); ;
}
** se si solo vuole verificare se l'elemento è cliccabile senza doverlo fare clic su quindi questo frammento non fa per te. In tal caso, direi che il webdriver js non fornisce i mezzi per farlo. (o almeno non l'ho ancora trovato, intuizioni benvenute :))
- 1. Android come posso attendere che un servizio sia effettivamente connesso?
- 2. Nell'interfaccia utente codificata C# esiste un modo per attendere che un controllo sia selezionabile.
- 3. Come attendere che un elemento non esista più in Selenium
- 4. Selenio - Come attendere che la pagina sia completamente carica
- 5. Come posso verificare fino a che un elemento non è selezionabile con nightwatchjs?
- 6. attendere che il wifi sia connesso su Android
- 7. Come posso verificare che "qualcosa" sia un hash in Perl?
- 8. attendere che l'applicazione angolare sia completamente renderizzata dallo script fantasma
- 9. Come verificare se un elemento non è selezionabile con Goniometro?
- 10. Come posso `attendere 'su un Rx Osservabile?
- 11. Come posso determinare che CollapsingToolbar sia compresso?
- 12. Come posso creare un pulsante invisibile, ma selezionabile in C#
- 13. Imposta un determinato elemento in gridview non selezionabile
- 14. Come posso rendere selezionabile una casella immagine?
- 15. Come verificare che un attributo sia presente in un elemento utilizzando Selenium WebDriver?
- 16. Avere un elemento selezionabile in un'intestazione di fisarmonica Bootstrap
- 17. Come posso creare un NSFont sia grassetto che corsivo?
- 18. Come posso attendere un elenco di Promises in JavaScript/TypeScript?
- 19. C# Come posso verificare che un file sia jpeg?
- 20. WebDriver - attendere elemento utilizzando Java
- 21. Comandi Selenium WebDriverJs
- 22. Come posso convertire un elemento DOM in un elemento jQuery?
- 23. Elemento elenco con pulsante non selezionabile più
- 24. Risorse per WebDriverJs?
- 25. Come posso evitare che ResultSet sia un'eccezione chiusa in Java?
- 26. Come rendere un elemento in una visualizzazione elenco non selezionabile in Android
- 27. Come posso aspettare che la pagina sia pronta in PhantomJS?
- 28. Come posso fare elementi MOLTI selezionabile utilizzando jQuery o CSS?
- 29. Fare div div "non selezionabile" in modo che il contenuto sottostante sia accessibile?
- 30. Come verificare che un JCheckBox sia selezionato?
Non penso che le "condizioni previste" siano presenti nel webdriver js. –