Selenium 隐式等待和显式等待之间的内部工作差异是什么

Selenium 隐式等待和显式等待之间的内部工作差异是什么,selenium,selenium-webdriver,webdriver,webdriverwait,implicitwait,Selenium,Selenium Webdriver,Webdriver,Webdriverwait,Implicitwait,显式等待示例 WebDriverWait wait = new WebDriverWait(driver, 10); WebElement myDynamicElement= wait.until(ExpectedConditions.elementToBeClickable(By.id("someid"))); WebDriver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeU

显式等待示例

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement myDynamicElement= wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
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"));
隐式等待示例

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement myDynamicElement= wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
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"));
假设myDynamicElement在第6秒时可见, 因此,在这两种情况下,驱动程序将等待到第6秒,控制将移动到连续的书面语句,我想了解在这种情况下,隐式和显式等待是如何不同的?他们如何在内部工作

隐式等待: 是将实例配置为在其尝试查找元素或查找元素组/集合(如果元素不立即可用)时轮询已配置时间的方法。根据当前的W3C规范,默认时间配置为
0
。我们可以在脚本/程序中的任何位置配置时间,并根据需要重新配置。设置后,它将在WebDriver实例的生存期内有效

工具书类 两份参考资料:


显式等待: 是您为WebDriver实例定义、配置和实现的代码块,用于在继续下一行代码之前等待满足特定条件。WebDriverWait和的某些方法/子句是实现的一种方法

工具书类 两份参考资料:


颗粒化: 根据您的查询…假设myDynamicElement在第6秒可见,因此在这两种情况下,驱动程序将等待到第6秒,控制将移动到连续的书面语句

隐式等待将轮询整个10秒,而不管myDynamicElement(或与定位器匹配的多个元素)是否在第4/6/8秒可见。因此,在这种情况下,脚本会延迟4


显式等待将等待元素
someid
变为可点击(显示并启用)的时间最长为10秒。一旦满足预期条件,WebElement就会返回。如果在配置的时间线的整个持续时间内未满足预期条件,则会看到适当的异常。

隐式等待用于在整个测试脚本或程序的每个连续测试步骤之间提供等待时间(例如30秒)。下一步仅在执行前一步后30秒(或给定的任何时间)后执行

语法:

WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
WebDriver driver = new FirefoxDriver();
WebDriverWait wait = new WebDriverWait(driver,30);
wait.until(ExpectedConditions.elementToBeClickable("Locator"));
显式等待用于暂停执行,直到满足特定条件或经过定义的最长时间。隐式等待已在整个测试脚本或程序的每个连续测试步骤之间应用,而显式等待仅应用于特定实例

语法:

WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
WebDriver driver = new FirefoxDriver();
WebDriverWait wait = new WebDriverWait(driver,30);
wait.until(ExpectedConditions.elementToBeClickable("Locator"));

可能的重复在网上已经有很多信息了。你读过什么?你到底不明白什么。看来你没有做过任何关于某个问题的研究。嗨,你得让我几天前再参考一下,看看显式比隐式有什么好处。我认为前两段没有指出重要的区别,得到的答案是完全错误的。让我给你解释一下。。。(在下一篇评论中继续)首先,隐式等待和显式等待之间的区别是,隐式等待是在驱动程序中设置的,但显式等待不是在驱动程序中设置的,而是在本地语言绑定中设置的。第二个错误是,两个等待都不是静态等待,如果时间设置为10秒,如果元素在5秒内可用,这两个等待都将立即允许进一步的操作发生。