2015-05-16 117 views
0

我的应用程序使用Boot Strap框架。应用程序的所有字段都将保存在制表操作中(焦点移出字段时)。如何降低硒的执行速度

代码:

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

问题:
当焦点移到从场author一个AJAX请求被发送,它需要的最小2-3S到回响应。在等待时间之间,我的下一行代码被执行,即(这里的url字段等等)。确切的问题是服务器响应后应用程序擦除了在响应收到之前输入的所有字段值。

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

我不认为显式将在这里帮助。因为该元素将出现在DOM中。

是否有其他的解决方法或可能的解决方案来克服这一点? TIA。

+0

你说你必须等待在下一个字段中输入数据之前,但是如何使用这个应用程序的用户知道他们在输入其他字段之前必须等待? – Louis

+0

@Louis:在生产中,响应速度非常快,用户不会遇到任何问题。但是回归套件必须在质量保证框上运行。由于响应延迟时间,我面临着问题。 – Manigandan

+0

@Manigandan在这种情况下,你应该镜像你的生产箱。这是测试的重点。尽可能镜像生产 – Saifur

回答

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")); 
    } 
}); 

个人而言,我更喜欢含蓄的等待中的淫秽/流利的等待。 你可以检查这个关于不同等待比较的非常好的答案https://sqa.stackexchange.com/questions/12866/how-fluentwait-is-different-from-webdriverwait

0

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

+0

您提供的链接是关于'selenium'(版本1),但问题被标记为'selenium-webdriver'或版本2,如果你更喜欢措辞 –

+0

除此之外,代理可以用来实现这一点,我有回答关于设置一个代理[这里](http://stackoverflow.com/a/18827260/1315120)。 –

+0

同意。有很多方法来实现这个捕获,我只是想说明这个想法, – Eugene