【问题标题】:How to reduce the execution speed of selenium如何降低selenium的执行速度
【发布时间】:2015-05-16 06:17:39
【问题描述】:

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

代码:

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

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

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

我认为 ImplicitExplicit 在这里没有帮助。因为该元素将存在于 DOM 中。

是否有任何其他解决方法或可能的解决方案来克服这个问题? TIA。

【问题讨论】:

  • 您说在下一个字段中输入数据之前必须等待,但是使用此应用程序的用户如何知道在输入其他字段之前必须等待?
  • @Louis:在生产中响应非常快,用户不会遇到任何问题。但是回归套件必须在 QA box 上运行。由于响应延迟时间,我遇到了问题。
  • @Manigandan 在这种情况下,您应该镜像您的生产箱。这就是测试的全部意义所在。尽可能镜像生产
  • 检查this answer 是否使用代理。
  • 你是不是暗示 DOM 不会被 javascript 以任何方式修改?

标签: twitter-bootstrap selenium selenium-webdriver automation


【解决方案1】:

是的,您可以使用隐式或显式等待,但隐式等待将适用于 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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 您提供的链接是关于 selenium(版本 1),但如果您更喜欢这种措辞,问题会被标记为 selenium-webdriver 或版本 2
    • 除此之外,可以使用代理来实现,我已经回答了设置代理here
    • 同意。有很多方法可以实现这种捕获,我只是想说明这个想法,
    猜你喜欢
    • 2014-04-25
    • 1970-01-01
    • 2022-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    相关资源
    最近更新 更多