Czy ktoś wie, jak czekać na WebElement można kliknąć w WebDriverJS? Już wiem, jak czekać, aż element będzie "widoczny", ale potrzebuję go "klikalnego". Coś podobnego do expectable conditions w powiązaniu z Pythonem. Nie udało mi się znaleźć czegoś podobnego w interfejsie API Webdriver Js.Jak mogę poczekać, aż element będzie można kliknąć w WebDriverJS?
Odpowiedz
Wygląda na to, że nie ma warunku odpowiadającego selenium.webdriver.support.expected_conditions.element_to_be_clickable
w języku Python. Jednak patrząc na źródło tego warunku, widzę, że robi on dwie kontrole:
To element jest widoczny.
Włączenie tej opcji.
Można więc poczekać, aż oba warunki staną się prawdziwe. Poniższy kod ilustruje, jak można to zrobić. Najpierw powoduje, że element jest niewidoczny i wyłącza go, ustawia pewne limity czasowe, aby był widoczny i mógł go włączyć, a następnie czekał, aż wystąpią dwa warunki.
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();
Kod może wydawać się nieco dziwny ze względu na fakt, że pracujemy z obietnicami. Nie, że obietnice są z natury dziwne, ale wymagają trochę czasu, aby się przyzwyczaić, gdy jeden jest używany do pracy z Pythonem.
Chłodny, aby sprawdzić zachowanie na API Pythona! Jeśli tak jest, problem rozwiązany! : D –
TO jest wyjaśnienie, którego szukałem przez miesiąc! Użyłem '.isEnabled()' i wykonałem 100 testów i wszystkie przeszły, podczas gdy wcześniej było na poziomie 90%. Mam nadzieję, że inni znajdą tę odpowiedź. Dziękuję bardzo @Louis –
DO wydaje się być najbliżej rzeczą w js webdriver na to:
Sprawdź: https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/until.html
Nie są już zdefiniowane oczekiwania warunki tam. Nie wiem, który z nich należy uznać za klikalny.
Dzięki właśnie zmieniłem link w komentarzu! –
Jeśli nie dbają o kliknięcie obiektu raz jest ona dostępna ** następnie można zrobić coś takiego:
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); ;
}
** jeśli tylko chcą sprawdzić, czy element jest klikalny bez konieczności klikania go to ten fragment nie jest dla Ciebie. W takim przypadku powiedziałbym, że webdriver js nie zapewnia środków do tego. (lub przynajmniej jeszcze go nie znalazłem, mile widziane wglądy :))
- 1. Jak mogę poczekać, aż strona będzie gotowa w PhantomJS?
- 2. Jak mogę poczekać, aż aplikacja konsoli będzie bezczynna?
- 3. Jak mogę poczekać, aż element jest widoczny z Kątomierzem, gdy kątowy nie jest dostępny?
- 4. Dlaczego mogę kliknąć element w selenu?
- 5. Jak czekać w kątomierzu, aż element zostanie włączony
- 6. Poczekaj, aż element będzie zawierał określony tekst z CasperJS
- 7. Jak poczekać, aż zakończy się tylko pierwszy wątek w Pythonie
- 8. Python selenu: poczekaj, aż element będzie klikalny - nie działa
- 9. AutoIT Poczekaj, aż element kontrolny pojawi się
- 10. Jak poczekać aż Location Manager, aby uzyskać wysoki dokładnych danych
- 11. Jak mogę rozpocząć nowy proces i czekać, aż się zakończy?
- 12. Jak mogę poczekać, aż użytkownik zakończy zapisywanie w tekście, aby wywołać funkcję?
- 13. Selen: Jak kliknąć element przycisku HTML?
- 14. Czy lepiej jest korzystać z witryny, która nie jest w pełni rozwinięta, lub poczekać, aż będzie w pełni funkcjonalna?
- 15. Jak zrobić element w widoku listy, którego nie można kliknąć w Androidzie
- 16. Jak mogę poczekać na zakończenie zewnętrznego procesu?
- 17. "Asercja nie powiodła się: musisz poczekać, aż środowisko uruchomieniowe będzie gotowe" Błąd podczas wywoływania funkcji C w JavaScript
- 18. Wątek z Androida czeka aż będzie widoczny
- 19. Jak czekać, aż dojo istnieje element?
- 20. Potrzebujesz aktywności Androida, aby poczekać, aż uzyskano lokalizację GPS
- 21. Czy powinniśmy poczekać, aż DOM załaduje się przed wywołaniem ko.applyBindings
- 22. Siła wywołanie funkcji JavaScript poczekać, aż poprzedni zakończeniu
- 23. Czy można wyłączyć toasty lub poczekać, aż toast zniknie podczas testowania?
- 24. Komendy Selenium WebDriverJs
- 25. Czekaj aż tekst będzie obecny w polu tekstowym
- 26. Animacja metoda applyTransformation nie wywołał aż kliknąć dowolny układ
- 27. Czy można poczekać, aż wszystkie pliki javascript zostaną załadowane przed wykonaniem kodu javascript?
- 28. Wyłączony przycisk można kliknąć w przeglądarce krawędzi
- 29. Jak poczekać, aż składnik React zakończy całkowicie aktualizację w Jest i/lub Enzyme?
- 30. Zasoby dla WebDriverJs?
Nie sądzę, że "Spodziewane warunki" są obecne w jSC webdrivera. –