我对Selenium Webdriver提供的隐式等待方法感到困惑。
何时使用隐式等待
a-用于页面加载(当使用driver.get时)或用于Ajax PopUp加载比如说我在Edit Box中进行了一些操作,并且正在进行一些查找或Ajax调用。
使用隐式等待的位置
我应该在Ajax调用或页面加载发生的所有方法之后使用,还是仅在一次足够之后使用(我只是从Selenium RC中获取参考,我们可以使用Selenium.SetSpeed方法)。
谢谢, 阿伦
答案 0 :(得分:6)
显式等待是您定义的代码,用于在继续执行代码之前等待某个条件发生。最糟糕的情况是Thread.sleep()
,它将条件设置为等待的确切时间段。提供了一些便捷方法,可帮助您编写仅在需要时等待的代码。 WebDriverWait
与ExpectedCondition
结合使用是一种可以实现的方法。示例如下:
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
但是,根据语言实现的不同而有所不同。有关ExpectedCondition
隐式等待是告诉WebDriver在尝试查找一个或多个元素(如果它们不是立即可用)时将DOM轮询一段时间。默认设置为0.设置后,将为WebDriver对象实例的生命周期设置隐式等待。下面是隐式等待的实现:
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
这两个定义都来自seleniumhq和最完美的定义。
toolsQA如何以及何时使用它们有一个很好的解释。加上隐式,显式和FLUENT 之间的比较值得一看。
答案 1 :(得分:0)
示例:的
WebDriverWait explicit_wait_Example = new WebDriverWait(driver, 10);
explicit_wait_Example.until(ExpectedConditions.elementToBeClickable(By_Locator)).click();
上面是使用显式等待的示例,直到哪一种是使用这种等待的最有效和最有效的方法之一。
答案 2 :(得分:0)
对于ajax调用,我更喜欢显式等待。但是如果你能弄清楚ajax调用的最小时间戳是什么,你可以隐式地提供等等。
Implicitwait会永久强制执行。所以你不需要一次又一次地宣布。它会影响驱动程序等待特定时间直到它抛出NoSuchElementException
。但是如果你更多地使用xpaths,那么在隐式等待中提供更大的超时会更好。
要添加的另一件事,implictlyWait仅影响findElement和findElements函数。其他功能不受影响。