让Selenium暂停X秒

时间:2013-11-15 19:37:25

标签: java selenium selenium-webdriver

我想要完成的是浏览页面,等待加载某些内容,然后拍摄并保存屏幕截图。

我已经拥有的代码是

WebDriver driver = new FirefoxDriver();


driver.get("http://www.site.com");


driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

try {

    File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    FileUtils.copyFile(scrFile, new File("/home/Desktop/image.png"));

} catch (Exception e) { 

       e.printStackTrace(); 
}

driver.close();

我需要等待的原因,即使页面被加载是因为它将被加载,但在网站上我想要在几秒钟后拍摄加载图片的内容。由于某种原因页面没有等待,是否有另一种方法可以让驱动程序/页面等待X秒?

6 个答案:

答案 0 :(得分:9)

您可以找到在初始页面加载后加载的元素,然后让Selenium等到找到该元素。

WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("ID")));

答案 1 :(得分:5)

那不是特定的硒特定事物。你只是希望java在加载页面之后但在拍摄屏幕截图之前暂停一下。

Thread.sleep(4000);

将它放在你的driver.get语句之后。

答案 2 :(得分:2)

为了防止有人帮助,你应该尽量避免隐式等待,特别是Thread#sleep尽可能多。如果您执行Thread.sleep(10),则代码将始终等待10秒,即使您的页面在1秒后就绪。因此,如果您经常使用它,这可能会大大减慢您的测试速度。

更好的方法是使用ExplicitWaits,这意味着只要某些操作发生或某些元素在页面上呈现,您就会等待。因此,在您的情况下,我会使用显式等待来检查是否所有内容都已加载,然后截取屏幕截图。

答案 3 :(得分:2)

如果你想延迟一定的秒数,而不是尽快回复,这里有一个类似于selenium IDE提供的暂停功能:

public void pause(Integer milliseconds){
    try {
        TimeUnit.MILLISECONDS.sleep(milliseconds);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

source

答案 4 :(得分:1)

最简单的

只需尝试一下,忘记休息!此代码的等效语言可以用任何语言使用。 我是用python编写的。

calloc

这将使编译器进入睡眠状态2秒钟。

答案 5 :(得分:0)

const { By, until } = require('selenium-webdriver');


this.wait = async function (amount: number) {
      try {
        await this.driver.wait(
          until.elementLocated(By.css('[data-test-id="does-not-exist"]')),
          amount,
          'Looking for element'
        );
      } catch (e) {
        console.log('waiting')
      }

我们正在寻找x秒钟不存在的css标识符。这是打字稿btw。这将是某个相关类上的方法,或者是一个函数本身。像这样使用它

  const button = await this.findByCSSSelector('[data-test-id="get-quote-button"]')
  const actions = this.driver.actions({ bridge: true }); 
  await actions.move({origin: button }).perform();

  // Small pause to observe animation is working correctly in all browsers
  await this.wait(700)

  const carat = await this.findByCSSSelector('[data-test-id="carat"]');

这将等待0.7秒,以便您可以看到功能测试中正在播放的动画。