Когда использовать явное ожидание против неявного ожидания в Webdriver Selenium? -- java поле с участием selenium поле с участием selenium-webdriver пол Связанный проблема

When to use explicit wait vs implicit wait in Selenium Webdriver?


56
vote

проблема

русский

Я использую:

 <код> driver.manage().timeouts().implicitlyWait(180, TimeUnit.SECONDS);   

Но он все еще непрерывно не работает для нижеизведанного элемента

 <код>     driver.findElement(By.id("name")).clear();     driver.findElement(By.id("name")).sendKeys("Create_title_01");   

Я добавил код ожидания:

 <код> for (int second = 0;; second++) {         if (second >= 120) fail("timeout");         try { if (isElementPresent(By.id("name"))) break; } catch (Exception e) {}         Thread.sleep(1000);     }   

Не следует подразумевать ждать, позаботьтесь о ожидании, пока элемент не найден? Также было бы лучше, если я буду использовать явное ждать вместо кода, который я добавил, что имеет <код> Thread.sleep() ?

Английский оригинал

I am using:

driver.manage().timeouts().implicitlyWait(180, TimeUnit.SECONDS); 

But it still fails continuously for the below element

    driver.findElement(By.id("name")).clear();     driver.findElement(By.id("name")).sendKeys("Create_title_01"); 

I have added wait code:

for (int second = 0;; second++) {         if (second >= 120) fail("timeout");         try { if (isElementPresent(By.id("name"))) break; } catch (Exception e) {}         Thread.sleep(1000);     } 

Shouldn't implicit wait take care of waiting till an element is found? Also would it be better if I use Explicit wait instead of the code I have added that has Thread.sleep()?

</div
        
       
       

Список ответов

109
 
vote
<Р> TL; DR: Всегда используйте явное ожидание. Забудьте, что неявное ожидание существует.
<Р> Вот краткое изложение на различиях между явным и неявным ожиданием: <Р> Явное ожидание:
    .
  • документированы и определяется поведение.
  • работает в локальной части селена (на языке вашего кода).
  • работает на любых условиях вы можете думать.
  • возвращает либо ошибка успеха или тайм-аут.
  • может определить отсутствие элемента как условие успеха.
  • можно настроить задержку между попытками и исключений игнорировать.
<Р> Неявное ожидания:
    . <Литий> без документов и практически неопределенное поведение. <Литий> работает в удаленной части селена (часть управления браузером).
  • работает только на находки элемента (ов) методов.
  • возвращает либо элемент найден или (после того, как тайм-аут) не найден.
  • , если проверка на отсутствие элемента всегда должны ждать, пока тайм-аут.
  • не может быть изменен, кроме глобального тайм-аута.

<Р> Примеры кода с объяснением. Первое неявное ожидание:
 <код> WebDriver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("http://somedomain/url_that_delays_loading"); WebElement myDynamicElement = driver.findElement(By.id("myDynamicElement"));   
<Р> Теперь явное ожидание:
 <код> WebDriver driver = new FirefoxDriver(); driver.get("http://somedomain/url_that_delays_loading"); WebDriverWait wait = new WebDriverWait(driver, 10); WebElement myDynamicElement = wait.until(   ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));   
<Р> Оба примера кода сделать то же самое. Найти определенный элемент и отказаться, если не найден через 10 секунд. Неявное ожидание может сделать только это. Можно лишь попытаться найти элемент с тайм-аутом. Силы явного ожидания в том, что он может ждать для всех видов условий. Кроме того, настроить тайм-аут и игнорировать определенные исключения. <Р> Пример возможных условий: <код> elementToBeClickable , <код> numberOfElementsToBeMoreThan или <код> LogicT0 . Вот список встроенных в ожидаемых условиях: https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html <Р> Другие объяснения: <Р> неявной таймаут ожидания имеет эффект только на <код> LogicT1 методы. Если установлено, то весь <код> LogicT2 будет «ждать» в течение заданного времени, прежде чем объявить, что элемент не может быть найден. <Р> Как <код> LogicT3 будет ждать не определен. Это зависит от браузера или операционной системы или версии селена. Возможные реализации являются:
    .
  • несколько раз попробовать, чтобы найти элемент до тайм-аута. вернуться, как только найден элемент.
  • попытаться найти элемент. ждать, пока тайм-аут. попробуйте еще раз.
  • ждать, пока тайм-аут. попытаться найти элемент.
<Р> Этот список собран из наблюдений и чтения сообщений об ошибках и беглого чтения исходного кода селеном.
<Р> Мой вывод: Неявное ожидание плохо. Возможности ограничены. Поведение без документов и зависит от реализации. <Р> Явное ожидание может сделать все неявное ожидание может и больше. Единственный недостаток явного ожидания немного более многословной кода. Но это многословие делает код явным. И явно лучше, что подразумевается. Верно?

Дальнейшее чтение:

    .
  • Официальная документация (на самом деле не объясняет проблематично, кроме предупреждения от смешивания неявного и явного ожидания).
  • Ответ на связанный вопрос от Jim Evans . Джим Эванс является сопровождающим селеном. Резюме: не смешивайте неявное и явное ожидание.
  • Два блога Сообщений Объяснение неявных и явных ждать несколько подробностей:
      .
    • http://vnrtech.blogspot.de/2013/04/ Selenium-imploxit-wait.html
    • http://vnrtech.blogspot.de/2013/04/Selenium-xplyit-wait.html
  • выбран ошибки о неявных и явных Ждите в Selenium :
      .
    • http://code.google.com/p/selenium/ Проблемы / детали? ID = 2934
    • http://code.google.com/p/selenium/ Проблемы / детали? ID = 4471
    • http://code.google.com/p/selenium/ Проблемы / детали? ID = 7972
  • код
      .
    • Явный ждать
    • Неявное ждать
  • Что произойдет, когда мы смешиваем неявное ждать и явное ждать
  • Как создать пользовательский ожидаемый Условия в Selenium
 

TL;DR: Always use explicit wait. Forget that implicit wait exists.


Here is a quick rundown on the differences between explicit and implicit wait:

Explicit wait:

  • documented and defined behaviour.
  • runs in the local part of selenium (in the language of your code).
  • works on any condition you can think of.
  • returns either success or timeout error.
  • can define absence of element as success condition.
  • can customize delay between retries and exceptions to ignore.

Implicit wait:

  • undocumented and practically undefined behaviour.
  • runs in the remote part of selenium (the part controlling the browser).
  • only works on find element(s) methods.
  • returns either element found or (after timeout) not found.
  • if checking for absence of element must always wait until timeout.
  • cannot be customized other than global timeout.

Code examples with explanation. First implicit wait:

WebDriver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get("http://somedomain/url_that_delays_loading"); WebElement myDynamicElement = driver.findElement(By.id("myDynamicElement")); 

Now explicit wait:

WebDriver driver = new FirefoxDriver(); driver.get("http://somedomain/url_that_delays_loading"); WebDriverWait wait = new WebDriverWait(driver, 10); WebElement myDynamicElement = wait.until(   ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement"))); 

Both code examples do the same thing. Find a certain element and give up if not found after 10 seconds. The implicit wait can do only this. It can only try to find an element with a timeout. The strength of explicit wait is that it can wait for all kinds of conditions. Also customize timeout and ignore certain exceptions.

Example of possible conditions: elementToBeClickable, numberOfElementsToBeMoreThan or invisibilityOf. Here is a list of the built in expected conditions: https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html

More explanations:

The implicit wait timeout has effect only on findElement* methods. If set then all findElement* will "wait" for the set time before declaring that the element cannot be found.

How a findElement* will wait is not defined. It depends on browser or operating system or version of selenium. Possible implementations are:

  • repeatedly try to find element until timeout. return as soon as element is found.
  • try to find element. wait until timeout. try again.
  • wait until timeout. try to find element.

This list is gathered from observations and reading bug reports and cursory reading of selenium source code.


My conclusion: Implicit wait is bad. The capabilities are limited. The behaviour is undocumented and implementation dependent.

Explicit wait can do everything implicit wait can and more. The only disadvantage of explicit wait is a bit more verbose code. But that verbosity makes the code explicit. And explicit is better that implicit. Right?


Further reading:

  • Official documentation (does not really explain the problematic other than warning from mixing implicit and explicit wait).
  • Answer on a related question from Jim Evans. Jim Evans is a maintainer of selenium. Summary: don't mix implicit and explicit wait.
  • Two blog posts explaining implicit and explicit wait in great detail:
    • http://vnrtech.blogspot.de/2013/04/selenium-implicit-wait.html
    • http://vnrtech.blogspot.de/2013/04/selenium-explicit-wait.html
  • Selected bugs about implicit and explicit wait in selenium:
    • http://code.google.com/p/selenium/issues/detail?id=2934
    • http://code.google.com/p/selenium/issues/detail?id=4471
    • http://code.google.com/p/selenium/issues/detail?id=7972
  • Code
    • explicit wait
    • implicit wait
  • What Happens When We Mix Implicit Wait And Explicit Wait
  • How to create custom expected conditions in Selenium
</div
 
 
         
         
4
 
vote

Implicit ждать - это глобальные настройки применимо для всех элементов, и если элемент появляется до указанного времени, чем скрипт, начнет выполнение в противном случае, будет бросать <код> LogicT4 Лучший способ использовать в методе настройки. Влияет только на <код> LogicT5 .

<Код> LogicT6 - это будет время спать для скрипта, не хорошим способом использовать в скрипте, как он спать без условий. Что если 2 секунды недостаточно в 5% случаев?

Явное ждать : ждать уточнения содержимого / изменения атрибута. Более используется, когда приложение дает AJAX CALL в систему и получает динамические данные и рендеринг на UI. В этом случае <код> LogicT7 подходит.

 

Implicit wait - It's global setting applicable for all elements and if element appear before specified time than script will start executing otherwise script will throw NoSuchElementException. Best way to use in setup method. Only affect By.findelement().

Thread.sleep() - It will sleep time for script, not good way to use in script as it's sleep without condition. What if 2 seconds are not enough in 5% of the cases?

Explicit wait: Wait for specify contains/attribute change. More used when application gives AJAX call to system and gets dynamic data and render on UI. In this case WebDriverWait is suitable.

</div
 
 
4
 
vote
<Р> Вы пробовали fluentWait? Реализация интерфейса Wait, который может иметь свой тайм-аут и интервал опроса настроены на лету. Каждый экземпляр FluentWait определяет максимальное количество времени, чтобы ждать, пока условия, а также частоту, с которой для проверки состояния. Кроме того, пользователь может настроить ждать, чтобы игнорировать определенные типы исключений, ожидая, например, NoSuchElementExceptions при поиске элемента на странице. <Р> видеть эту ссылку свободно ожидания описание <Р> В частности, я использовал свободно выжидательную таким образом:
 <код> public WebElement fluentWait(final By locator) {     Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)         .withTimeout(30, TimeUnit.SECONDS)         .pollingEvery(5, TimeUnit.SECONDS)         .ignoring(NoSuchElementException.class);      WebElement foo = wait.until(         new Function<WebDriver, WebElement>() {             public WebElement apply(WebDriver driver) {                 return driver.findElement(locator);             }         }     );      return foo;           };   
<Р> Как вы уже заметили, беглые возвращает ожидания нашел веб-элемент. Таким образом, вы просто передать локатор с По типу, а затем вы можете выполнять любые действия по найденному веб-элемента.
 <код> fluentWait(By.id("name")).clear();   
<Р> Надеюсь, что это поможет вам)
 

Have you tried fluentWait? An implementation of the Wait interface that may have its timeout and polling interval configured on the fly. Each FluentWait instance defines the maximum amount of time to wait for a condition, as well as the frequency with which to check the condition. Furthermore, the user may configure the wait to ignore specific types of exceptions whilst waiting, such as NoSuchElementExceptions when searching for an element on the page.

see this link fluent wait description

In particular I used fluent wait in this way:

public WebElement fluentWait(final By locator) {     Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)         .withTimeout(30, TimeUnit.SECONDS)         .pollingEvery(5, TimeUnit.SECONDS)         .ignoring(NoSuchElementException.class);      WebElement foo = wait.until(         new Function<WebDriver, WebElement>() {             public WebElement apply(WebDriver driver) {                 return driver.findElement(locator);             }         }     );      return foo;           }; 

As you've noticed fluent wait returns found web element. So you simply pass the locator with By type and then you can perform any actions on the found web element.

fluentWait(By.id("name")).clear(); 

Hope this helps you)

</div
 
 
 
 
2
 
vote
<Р> Вы пытались использовать ' WebDriverWait '? Я полагаю, что вы хотите, это:
 <код> WebDriverWait _wait = new WebDriverWait(driver, new TimeSpan(0, 0, 2)); //waits 2 secs max _wait.Until(d => d.FindElement(By.Id("name"))); //do your business on the element here :)   
<Р> Это в значительной степени будет, в моем понимании, делать то, что ваш текущий код. Он будет постоянно пытаться методом (в то время как не обращая внимания не найдено исключения) до тайма-аута переданных в отрезке времени достигаются и третий параметр может быть введен, чтобы указать сон в миллисекундах. К сожалению, если это то, что делает implicitlyWait тоже! <Р> Изменить: Я сделал некоторое чтение сегодня, и понять ваш вопрос и понять, что это именно то, что ваши настройки неявного ожидания должны делать. Будет ли оставить его здесь только в случае, если код сам по себе может помочь кому-то еще.
 

Have you tried using 'WebDriverWait' ? I imagine what you want is this:

WebDriverWait _wait = new WebDriverWait(driver, new TimeSpan(0, 0, 2)); //waits 2 secs max _wait.Until(d => d.FindElement(By.Id("name"))); //do your business on the element here :) 

This pretty much will, to my understanding, do what your current code is. It will constantly try the method (while ignoring not found exceptions) until the timeout of the passed in timespan is reached and a third parameter can be entered to specify the sleep in milliseconds. Sorry if this is what implicitlyWait does too!

Edit: I did some reading today and understand your question better and realise that this does exactly what your setting of implicit wait should do. Will leave it here just in case the code itself can help someone else.

</div
 
 
         
         
1
 
vote

<сильный> ImplicitWait:

 <код>     1. Static Wait      2. UnConditional Wait (No conditions are given)     3. Applicable throughout the program   
<Р> Декларирование неявного ожидания в Java - селен:
 <код> driver.manage().timeout().implicitWait(20, TimeUnit.Seconds());   

<сильный> Когда использовать неявный Wait?

<Р> неявное ожидание не рекомендуется использовать в любом месте в свите автоматизации, так как это является статическим, и мы не знаем, когда веб-элемент появится на сайте.

IE. Допустим, у вас есть множество неявных ждать 5 сек, и водитель может идентифицировать веб-элемент в 2-х секунд, как мы применили неявный драйвер ждать будет ждать более 3-х секунд (до 5 секунд). Это замедлит процесс автоматизации.

<Р> <сильный> Явное Wait:
  1. Dynamic Wait
  2. Условный Wait.
  3. Не применимо во всей программе
<Р> Объявление Явный Ожидать в Java селеном.
 <код> WebDriverWait wait=new WebDriverWait(driver, 20); wait.until(somecondition);   

<сильный> Когда использовать явное ожидание?

<Р> Мы должны всегда использовать явное ожидание, поскольку она носит динамический характер.

IE. Допустим, у вас есть набор явного ожидание 5 сек, и водитель может идентифицировать веб-элемент в 2-х секунд, как мы применили явный драйвер ждать не будет ждать более 3-х секунд (до 5 секунд). Водитель будет продолжаться через 2 секунды. Это позволит закрепить процесс автоматизации.

 

ImplicitWait :

    1. Static Wait      2. UnConditional Wait (No conditions are given)     3. Applicable throughout the program 

Declaring the implicit wait in java - selenium:

driver.manage().timeout().implicitWait(20, TimeUnit.Seconds()); 

When to use implicit Wait?

The implicit wait is not recommended to use anywhere in the Automation suite, as this is static, and we don't know when the web element will pop up in the website.

ie. Let's say you have set implicit wait of 5 sec, and the driver is able to identify the web element in 2 seconds, as we have applied implicit wait driver will wait for 3 more seconds (till 5 seconds). This will slow down the process of automation.

Explicit Wait:

  1. Dynamic Wait
  2. Conditional Wait.
  3. Not applicable throughout the program

Declaring the Explicit Wait in Java Selenium.

WebDriverWait wait=new WebDriverWait(driver, 20); wait.until(somecondition); 

When to use an explicit wait?

We should always use explicit wait since it is dynamic in nature.

ie. Let's say you have set explicit wait of 5 sec, and the driver is able to identify the web element in 2 seconds, as we have applied explicit wait driver will not wait for 3 more seconds (till 5 seconds). The driver will continue after 2 seconds. This will fasten up the automation process.

</div
 
 
   
   
0
 
vote

Implicit ждет используются для обеспечения времени ожидания (скажем, 30 секунд) между каждым последовательным тестовыми шагами по всему тестому скрипту или программе. Следующий шаг выполняется только в течение 30 секунд (или в любом количестве данных времени) после выполнения предыдущего шага

<Сильный> Синтаксис:

 <код> WebDriver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);   

Явные ждет используются для остановки выполнения до того времени, когда конкретное условие не будет выполнено или максимальное время, которое определено, истекло. Неявное ожидание применяется между каждым последовательным тестовыми шагами по всему тестовым скриптам или программам, когда явный ждет только для определенного экземпляра.

<Сильный> Синтаксис:

 <код> WebDriver driver = new FirefoxDriver(); WebDriverWait wait = new WebDriverWait(driver,30);   
 

Implicit waits are used to provide a waiting time (say 30 seconds) between each consecutive test steps across the entire test script or program. Next step only executed when the 30 Seconds (or whatever time is given is elapsed) after execution of previous step

Syntax:

WebDriver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 

Explicit waits are used to halt the execution till the time a particular condition is met or the maximum time which is defined, has elapsed. Implicit wait has applied between each consecutive test steps across the entire test script or programs while Explicit waits are applied for a particular instance only.

Syntax:

WebDriver driver = new FirefoxDriver(); WebDriverWait wait = new WebDriverWait(driver,30); 
</div
 
 
0
 
vote

После того, как посмотрел на все ответы и комментарии здесь, я идут их с некоторым кодом для проверки одновременного использования как неявных, так и явных ждет.

    .
  • Используйте неявную ждать, только когда вы (как правило) не нужно проверять отсутствие элементов, например, в выброшенном проекте веб-соскоба.

  • Никогда не смешивайте неявную и явную ждать вместе. См. link1 и Link2 . Если вы проверяете на отсутствие элемента, то время ожидания становится непредсказуемым. В следующем коде только иногда ожидание времени = неявное ожидание. Вы можете проверить на отсутствие, просто используя неверный локатор.

Я взял код в Link2 и Refactored он делает его коротким и предоставлять сводку. Код показывает фактическое время ожидания, когда используются как неявные, так и явные ожидания.

Код ниже отправляется на сайт и пытается найти действительный элемент и неверный элемент. Он использует как неявные, так и явные ждет. В случае недействительного поиска элементов он пытается разные комбинации неявных / IW и явных / EW-ожидания - IW = EW, IW & GT; EW и IW & LT; EW.

Во-первых, выход:

 <код> WHEN ELEMENT IS FOUND WITHOUT ANY DELAY : >>> WITH implicit = 30, explicit = 20  :::::  Wait time = 0   WHEN ELEMENT IS NOT FOUND : a. When implicit wait = explicit wait. >>> WITH implicit = 10, explicit = 10  :::::  Wait time = 10. ***WITH EXCEPTION*** : NoSuchElementException  b. When implicit wait > explicit wait. >>> WITH implicit = 30, explicit = 10  :::::  Wait time = 30. ***WITH EXCEPTION*** : NoSuchElementException  c. When implicit wait < explicit wait. >>> WITH implicit = 10, explicit = 30  :::::  Wait time = 10. ***WITH EXCEPTION*** : NoSuchElementException   

код:

 <код> import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait;  import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; import java.util.concurrent.TimeUnit;  /*  * Facing this chromedriver error after opening browser - [SEVERE]: Timed out receiving message  * from renderer: 0.100.  * */ public class TimeTest {     static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd-M-yyyy hh:mm:ss a");     static final String URL = "https://www.redbus.in/";     static final String TIME_ZONE_NAME = "Europe/Madrid";     static final By validLoc = By.id("src");     static final By inValidLoc = By.id("invalid locator");     static WebDriver driver;          public static void main(String[] args) {             dateFormat.setTimeZone(TimeZone.getTimeZone(TIME_ZONE_NAME));              //>>> Open chrome browser             System.setProperty("webdriver.chrome.driver", "C:/drivers/chromedriver.exe");             TimeTest.driver= new ChromeDriver();             driver.manage().window().maximize();              //>>> Test waiting logic.              System.out.println("  WHEN ELEMENT IS FOUND WITHOUT ANY DELAY : ");             //mixing of implicit wait and explicit wait will not impact on webdriver behavior.             testWait(30, 20, validLoc, "");              System.out.println("  WHEN ELEMENT IS NOT FOUND : ");             //Run the method multiple times. Wait time generally = 10 seconds, but sometimes = 20 seconds.             testWait(10, 10, inValidLoc, "a. When implicit wait = explicit wait.");              //Wait time always = implicit wait. Generally ?             testWait(30, 10, inValidLoc, "b. When implicit wait > explicit wait.");              //Wait time always = implicit wait. Generally ?             testWait(10, 30, inValidLoc, "c. When implicit wait < explicit wait.");              //>>> Close the browser.             driver.quit();         }           public static void testWait(int implicitWait, int explicitWait, By locator, String comment){             // setting implicit time             driver.manage().timeouts().implicitlyWait(implicitWait, TimeUnit.SECONDS);              // Loading a URL             driver.get(URL);              // defining explicit wait             WebDriverWait wait= new WebDriverWait(driver, explicitWait);             // Locating and typing in From text box.               Date start = new Date();             String waitStats = comment + " >>> WITH implicit = " + implicitWait + ", explicit = " + explicitWait +                     "  :::::  " ;//+ "Wait start = " + dateFormat.format(start)              String exceptionMsg = "";              try {                 WebElement fromTextBox = wait.until(ExpectedConditions.visibilityOf(driver.findElement(locator)));             }catch (Exception ex){                 exceptionMsg = ". ***WITH EXCEPTION*** : " + ex.getClass().getSimpleName();             }              Date end = new Date();             //waitStats += ", Wait end = " + dateFormat.format(end)             waitStats += "Wait time = " +                     TimeUnit.SECONDS.convert(end.getTime() - start.getTime(), TimeUnit.MILLISECONDS)                     + exceptionMsg + " ";              System.out.println(waitStats);          }  }   
 

After looking at all the answers and comments here, I am summarizing them with some code to test the simultaneous use of both implicit and explicit waits.

  • Use implicit waits only when you (generally) don't need to check for absence of elements, for example in a throw away web scraping project.

  • Never mix implicit and explicit waits together. Refer link1 and link2. If you test for absence of an element, then wait time becomes unpredictable. In the below code, only sometimes the wait time = implicit wait. You can test for absence by simply using an invalid locator.

I have taken the code in link2 and refactored it make it short and provide a summary. The code shows the actual wait time when both implicit and explicit waits are used.

The code below goes to a website and tries to find a valid element and invalid element. It uses both implicit and explicit waits. In case of invalid element search, it tries different combinations of implicit/IW and explicit/EW wait times - IW = EW, IW > EW and IW < EW.

First, the output :

WHEN ELEMENT IS FOUND WITHOUT ANY DELAY : >>> WITH implicit = 30, explicit = 20  :::::  Wait time = 0   WHEN ELEMENT IS NOT FOUND : a. When implicit wait = explicit wait. >>> WITH implicit = 10, explicit = 10  :::::  Wait time = 10. ***WITH EXCEPTION*** : NoSuchElementException  b. When implicit wait > explicit wait. >>> WITH implicit = 30, explicit = 10  :::::  Wait time = 30. ***WITH EXCEPTION*** : NoSuchElementException  c. When implicit wait < explicit wait. >>> WITH implicit = 10, explicit = 30  :::::  Wait time = 10. ***WITH EXCEPTION*** : NoSuchElementException 

The code:

import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait;  import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; import java.util.concurrent.TimeUnit;  /*  * Facing this chromedriver error after opening browser - [SEVERE]: Timed out receiving message  * from renderer: 0.100.  * */ public class TimeTest {     static final SimpleDateFormat dateFormat = new SimpleDateFormat("dd-M-yyyy hh:mm:ss a");     static final String URL = "https://www.redbus.in/";     static final String TIME_ZONE_NAME = "Europe/Madrid";     static final By validLoc = By.id("src");     static final By inValidLoc = By.id("invalid locator");     static WebDriver driver;          public static void main(String[] args) {             dateFormat.setTimeZone(TimeZone.getTimeZone(TIME_ZONE_NAME));              //>>> Open chrome browser             System.setProperty("webdriver.chrome.driver", "C:/drivers/chromedriver.exe");             TimeTest.driver= new ChromeDriver();             driver.manage().window().maximize();              //>>> Test waiting logic.              System.out.println("  WHEN ELEMENT IS FOUND WITHOUT ANY DELAY : ");             //mixing of implicit wait and explicit wait will not impact on webdriver behavior.             testWait(30, 20, validLoc, "");              System.out.println("  WHEN ELEMENT IS NOT FOUND : ");             //Run the method multiple times. Wait time generally = 10 seconds, but sometimes = 20 seconds.             testWait(10, 10, inValidLoc, "a. When implicit wait = explicit wait.");              //Wait time always = implicit wait. Generally ?             testWait(30, 10, inValidLoc, "b. When implicit wait > explicit wait.");              //Wait time always = implicit wait. Generally ?             testWait(10, 30, inValidLoc, "c. When implicit wait < explicit wait.");              //>>> Close the browser.             driver.quit();         }           public static void testWait(int implicitWait, int explicitWait, By locator, String comment){             // setting implicit time             driver.manage().timeouts().implicitlyWait(implicitWait, TimeUnit.SECONDS);              // Loading a URL             driver.get(URL);              // defining explicit wait             WebDriverWait wait= new WebDriverWait(driver, explicitWait);             // Locating and typing in From text box.               Date start = new Date();             String waitStats = comment + " >>> WITH implicit = " + implicitWait + ", explicit = " + explicitWait +                     "  :::::  " ;//+ "Wait start = " + dateFormat.format(start)              String exceptionMsg = "";              try {                 WebElement fromTextBox = wait.until(ExpectedConditions.visibilityOf(driver.findElement(locator)));             }catch (Exception ex){                 exceptionMsg = ". ***WITH EXCEPTION*** : " + ex.getClass().getSimpleName();             }              Date end = new Date();             //waitStats += ", Wait end = " + dateFormat.format(end)             waitStats += "Wait time = " +                     TimeUnit.SECONDS.convert(end.getTime() - start.getTime(), TimeUnit.MILLISECONDS)                     + exceptionMsg + " ";              System.out.println(waitStats);          }  } 
</div
 
 
     
     
0
 
vote

<Сильные> Неявное ожидание:

  1. применимо ко всем командам Driver.findelement
  2. заботится только для наличия элемента. Если элемент невидим или не взаимодействует, то он не позаботится об этом.

Явное ждать

  1. Вы можете проверить наличие, видимость, взаимодействие и многое другое - динамически ждать этих

    webdriverwait ждать = новый webdriverwait (водитель, длительность .Ofseconds (20)); wait.until (ожидаемые капитальные возможности. ПредварительноEfelementLocatedbebyby (by.id ("xcxcxcc"));

 

Implicit wait:

  1. Applicable to all driver.findelement commands
  2. Cares only for the presence of the element. If the element is invisible or not interactable then it won't care about that.

Explicit Wait

  1. You can check presence, visibility , interactability and many other things - dynamically wait for these

    WebDriverWait wait = new WebDriverWait(driver,Duration.ofSeconds(20)); wait.until(ExpectedConditions.presenceOfElementLocatedBy(By.id("xcxcxc"));

</div
 
 

Связанный проблема

0  Java нерешенная переменная JPanel?  ( Java unresolved jpanel variable ) 
Почему не может <код> aniPanel быть разрешена в переменной. Я пробовал <код> AniPanel aniPanel = new AniPanel(); Но это не решает проблему. Я также по...

0  Basic Echo Server, отношения клиент-сервера  ( Basic echo server client server relationship ) 
Так как мой проект, который мне пришлось написать класс клиента и простой класс серверов, который будет эхом сообщение, написанным клиентом. По какой-то при...

1  Как увеличить предел параллельного соединения OpenFire?  ( How to increase openfire concurrent connection limit ) 
Я пытаюсь проверить, сколько одновременных пользовательских подключений Openfire может обрабатывать. Я заметил предел при 4000 пользователями. Как я могу ...

0  ConstanaintValidator - сделать JPA сделать проверку после ввода  ( Constraintvalidator make jpa make the validation after input ) 
Можно ли сделать JPA проверить вход сразу после типов пользователей в чем-либо? Я использую EclipseLink. Я не хочу ждать, пока JPA сохраняется для проверк...

1  WebView loaddatawithbaseurl java.lang.nullpointerexception  ( Webview loaddatawithbaseurl java lang nullpointerexception ) 
<код> //. . . public class MainActivity extends Activity { //. . . @Override protected void onCreate( Bundle savedInstanceState ) { //....

1  Получить все идентификаторы элементов из Dynamodb Java с помощью dynamodbmapper  ( Retrieve all items ids from dynamodb java using dynamodbmapper ) 
Моя цель - получить идентификаторы всех предметов. Для этого я собираюсь использовать Java и Dynamodbmapper. Способ сделать это использовать сканирование . П...

12  Способ вызова в EJB на jboss запустить [дубликат]  ( Call method in ejb on jboss startup ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

0  Чехол для тестирования, где нуль должен быть возвращен с помощью RestController с Mockito Change  ( Testing case where null should be returned using restcontroller with mockito fai ) 
Я хочу проверить корпус NullPointexception, который следует бросить контроллер, который я проверяю, но я всегда получаю ошибку NullPointexception. Я пытаюсь п...

1  Eclipse IDE отключается часто  ( Eclipse ide shuts down frequently ) 
Я пытался использовать SDK SDK SDK 22.3.0-887826, чтобы узнать о Develeopment Android, однако IDE отключается часто. Это происходит много, но в основном при и...

1  Простое Javaee HTML Get / Post Application  ( Simple javaee html get post application ) 
Я просто начинаю с Javaee (я вполне свободно владею в Javase), и у меня возникли проблемы с обездованием моего мозга вокруг всех новых вещей, которые необходи...

1  Обратитесь к веб-странице внутри файла JAR  ( Refer to a web page inside a jar file ) 
У меня есть рабочий проект. Он включает в себя другой проект, который имеет дело с отдыхом как REST-API.jar. Теперь я сделал одностраничное интернет-интерфе...

1  Кварц Schdeuler для нескольких проектов в JBOSS 5  ( Quartz schdeuler for multiple projects in jboss 5 ) 
Я развернул два проекта (P1 & AMP; P2) в JBOSS 5. Оба проекта настроены с различными кварцевыми планировщиками. Но когда я заплатурую работу на P1, он доступа...

-2  В классе F250.java есть две петли, которые не будут работать  ( There are two loops in the f250 java class that wont run ) 
Класс F250.java - это объект оружия, и есть два метода, которые привлекают и обновляют пули, выходящие из пистолета. Я сделал класс пули и сделал массив пули ...

4  Как полностью квалифицировать класс, имя пакета которого сталкивается с местным именем члена?  ( How to fully qualify a class whose package name collides with a local member nam ) 
ОК, вот очень любопытная языковая головоломка Java 7 для специалистов JLS там. Следующий кусок кода не скомпилируется, ни с Javac, ни с Eclipse: <код> ...

105  Почему C # реализует методы как не виртуальные по умолчанию?  ( Why c sharp implements methods as non virtual by default ) 
В отличие от Java, почему C # методы лечения как не виртуальные функции по умолчанию? Скорее всего, это проблема производительности, а не на других возможных ...

Связанный проблема

0  Java нерешенная переменная JPanel? 
0  Basic Echo Server, отношения клиент-сервера 
1  Как увеличить предел параллельного соединения OpenFire? 
0  ConstanaintValidator - сделать JPA сделать проверку после ввода 
1  WebView loaddatawithbaseurl java.lang.nullpointerexception 
1  Получить все идентификаторы элементов из Dynamodb Java с помощью dynamodbmapper 
12  Способ вызова в EJB на jboss запустить [дубликат] 
0  Чехол для тестирования, где нуль должен быть возвращен с помощью RestController с Mockito Change 
1  Eclipse IDE отключается часто 
1  Простое Javaee HTML Get / Post Application 
1  Обратитесь к веб-странице внутри файла JAR 
1  Кварц Schdeuler для нескольких проектов в JBOSS 5 
-2  В классе F250.java есть две петли, которые не будут работать 
4  Как полностью квалифицировать класс, имя пакета которого сталкивается с местным именем члена? 
105  Почему C # реализует методы как не виртуальные по умолчанию? 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.