让Selenium暂停X秒

use*_*619 17 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();
Run Code Online (Sandbox Code Playgroud)

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

use*_*619 11

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

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

  • 只需提及一下,在这种方法中,每500毫秒测试一次ExpectedCondition,以查看是否满足条件(此处可见“ ID”元素)直到超时(此处设置为10)。对于自定义谓词,也可以编写自己的条件。有关此文档,请参见:http://www.seleniumhq.org/docs/04_webdriver_advanced.jsp (2认同)

Jas*_*Jas 6

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

Thread.sleep(4000);
Run Code Online (Sandbox Code Playgroud)

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

  • 因此,如果他在 1,000 个套件中的每个测试中截取屏幕截图,并且该元素通常会在 500 毫秒后加载,则这种方法会增加一个小时的构建时间。 (3认同)
  • 抱歉 - 因使用 Thead.sleep 而被否决。总有其他解决方案,比如条件等待等 (2认同)

Joh*_*nP2 5

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

public void pause(Integer milliseconds){
    try {
        TimeUnit.MILLISECONDS.sleep(milliseconds);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

来源