我正在用java编写我的第一个webdriver脚本,脚本运行正常,但速度非常快。
例如: - 我的hmtl页面中有文本框和下拉元素,我编写了用于发送键和从元素中选择值的脚本,但是当我执行脚本时,它的速度非常快,是否有必要给出每一步都隐含等待?这值得吗 ?或者还有什么解决方案,以便脚本以平滑的方式运行,以便正确地看到每一步。
以下是我的代码: -
public static void main(String[] args) {
WebDriver wb = new FirefoxDriver();
wb.manage().window().maximize();
wb.navigate().to("http://newtours.demoaut.com/");
/*WebDriverWait wait1 = new WebDriverWait(wb, 50);
WebElement element1 = wait1.until(ExpectedConditions.
elementToBeClickable(By.xpath("//img[@alt='Mercury Tours']")));*/
wb.findElement(By.xpath("//a[text()='REGISTER']")).click();
wb.findElement(By.xpath("//input[@name='firstName']")).sendKeys("Rameshwari");
wb.findElement(By.xpath("//input[@name='lastName']")).sendKeys("Nayak");
wb.findElement(By.xpath("//input[@name='phone']")).sendKeys("7208471118");
wb.findElement(By.xpath("//input[@id='userName']")).sendKeys("Rama");
wb.findElement(By.xpath("//input[@name='address1']")).sendKeys("Nithyanand Chawl");
wb.findElement(By.xpath("//input[@name='city']")).sendKeys("Mumbai");
wb.findElement(By.xpath("//input[@name='state']")).sendKeys("Maharashtra");
wb.findElement(By.xpath("//input[@name='postalCode']")).sendKeys("4000017");
Select dd = new Select(wb.findElement(By.xpath("//select[@name = 'country']")));
dd.selectByVisibleText("INDIA");
}
答案 0 :(得分:1)
您可以根据需要选择以下任何一项,但不要同时使用隐式和显式等待。这会导致等待时间不一致,即使您有时也会导致TimeoutExceptions认为不应该有任何。
隐含等待
隐式等待是告诉WebDriver在尝试查找一个或多个元素时,如果它们不能立即可用,则会在一定时间内轮询DOM。
默认设置为0.一旦我们定义了隐式等待,它将为WebDriver对象实例的生命周期设置。
它将被写入一次并自动应用于整个会话。一旦我们启动Webdriver,就应该立即应用它。
隐式等待不会对应用程序中的所有命令/语句起作用。它只适用于" FindElement"和" FindElements"语句。
如果我们设置了隐式等待,如果在第一个实例中找不到该元素,则find元素不会抛出异常,而是会在超时之前轮询该元素,然后继续进行。
明确等待 -
如果您想根据特定条件等待,可以使用显式等待 - 例如visibilityOfWebElement,ElementToBeClickable等。
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("xyz")));
当我们需要在执行任何操作后等待特定内容/属性更改时,主要使用显式等待,例如当应用程序向系统发出AJAX调用并获取动态数据并在UI上呈现时。
示例:就像有下拉状态和状态,根据所选的国家/地区值,状态下拉列表中的值将会更改,这将需要几秒钟的时间来根据用户选择获取数据。 / p>
流利等待
使用FluentWait,我们可以定义等待条件的最长时间,以及检查条件的频率。
此外,用户还可以配置为忽略特定类型的异常,例如" NoSuchElementExceptions"在搜索元素时。 findElement(By)和findElements(By)抛出NoSuchElement异常。当它尝试查找任何元素时,它返回当前页面上的第一个匹配元素,否则它会抛出NoSuchElementException - 当没有找到匹配的元素时。
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
//Wait for the condition
.withTimeout(30, TimeUnit.SECONDS)
// which to check for the condition with interval of 5 seconds.
.pollingEvery(5, TimeUnit.SECONDS)
//Which will ignore the NoSuchElementException
.ignoring(NoSuchElementException.class);
答案 1 :(得分:-2)
在代码中提供一次隐式等待属性就足够了,它适用于代码中的所有语句。 只有在因页面加载而无法找到元素的情况下才需要等待。如果脚本按预期工作,则从性能点开始越快越好。