如何降低硒的执行速度

时间:2015-05-16 06:17:39

标签: twitter-bootstrap selenium selenium-webdriver automation

我的应用程序正在使用Boot Strap框架。应用程序的所有字段都会在制表符操作中保存(当焦点移出字段时)。

代码:

driver.findElement(By.id("author")).sendkeys("xyz");  
driver.findElement(By.xpath("url")).sendkeys("aaa"); 

问题:
当焦点从字段author移动时,会发送ajax请求,并且至少需要2-3秒才能响应。在延迟时间之间执行下一行代码,即(此处为url字段等)。确切的问题是在服务器响应之后,应用程序擦除了在响应接收之前输入的所有字段值。

我认为解决方案是降低执行速度。但我知道在网络驱动程序中我们没有像RC那样的选项setspeed

我不认为隐式明确会对此有所帮助。因为该元素将出现在DOM中。

是否有其他解决方法或可能的解决方案可以解决这个问题? TIA。

2 个答案:

答案 0 :(得分:0)

是的,您可以使用隐式或显式等待,但隐式等待将适用于WebDriver对象实例的生命周期(除非您再次更改它),因此您可以更好地使用显式等待或流畅的等待。

明确等待

WebDriverWait wait = new WebDriverWait(driver, 30);  
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("foo")));  

流利等待

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
    .withTimeout(30, SECONDS)
    .pollingEvery(5, SECONDS)
    .ignoring(NoSuchElementException.class);

     WebElement foo = wait.until(new Function<WebDriver, WebElement>() 
     {
        public WebElement apply(WebDriver driver) {
        return driver.findElement(By.id("foo"));
     }
});

我个人更喜欢Explicit / Fluent等待隐式等待。 您可以查看关于不同等待https://sqa.stackexchange.com/questions/12866/how-fluentwait-is-different-from-webdriverwait

的比较的非常好的答案

答案 1 :(得分:0)

其他方法是捕获网络流量。然后,您将能够知道何时发送了ajax请求并捕获响应。所以你的逻辑将由适当的ajax请求/响应驱动。请参阅Java示例here