@pavel_kazlou, dobrze dotycząca pytanie na FluentWait: Zasadniczo istnieją dwa rodzaje wait: Explicit wait
WebDriverWait.until(condition-that-finds-the-element)
niejawny czekać
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
Różnica jest
- Oczywiste - Implicit wait time jest stosowany do wszystkich elementów w skrypcie , ale Jawny tylko do określonego elementu
- W języku Explicit możesz skonfigurować, jak często (zamiast 500 millisecond) chcesz sprawdzić warunek.
- W trybie jawnym można także skonfigurować tak, aby ignorował inne wyjątki niż "NoSuchElement" przed upływem limitu czasu. Użyj FluentWait, który działa podobnie do WebDriverWait (co w rzeczywistości rozszerza FluentWait), ale zapewnia nieco większą elastyczność.
Oto przykład użycia WebDriverWait (Użyj innego konstruktora WebDriverWait, aby określić interwał sondowania elementu (mierzony w milisekundach).):
new WebDriverWait(webDriver(), 10, 50).until(ExpectedConditions.elementToBeClickable(By.xpath(menuItemXpath)));
Korzystanie z FluentWait który działa podobnie do WebDriverWait (która w rzeczywistości rozciąga FluentWait), ale daje trochę więcej elastyczności: w szczególności możliwość wyboru wyjątek WebDriver zignorować. Przykładem Wykorzystanie:
new FluentWait(webDriver())
.withTimeout(timeout, TimeUnit.SECONDS)
.pollingEvery(50, TimeUnit.MILLISECONDS)
.ignoring(NoSuchElementException.class)
.until(ExpectedConditions.elementToBeClickable(By.xpath(menuItemXpath)));
Kończąc moją uwagę: fluentWait jest Explicit typu oczekiwania i zapewnia możliwość wyboru wyraźnie jaki typ wyjątku WebDriver ignorować, gdzie jak każdy niejawny wait obejmuje stałą ilość czasu, aby czekać dla dowolnego webElement. Z tego punktu widzenia podejście IMHO fluentWait jest bardziej niezawodne.
że odtwarzane nieco wokół z 'driver.findElements (By.cssSelector (" id = [a] [id = b ] "))' ale to nie jest * lub *. Nie znalazłem selektora css * lub *. – VolkerK