有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java让Selenium暂停X秒

我试图完成的是浏览一个页面,等待加载,然后拍摄并保存一个屏幕截图

我已有的代码是

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) 个答案

  1. # 1 楼答案

    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')
          }
    

    我们寻找一个css标识符,它在x秒内不存在。顺便说一句,这是typescript。这可能是某个相关类上的一个方法,或者是一个函数本身。像这样使用它

      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秒,以便您可以看到功能测试中正在运行的任何动画

  2. # 2 楼答案

    为了防止它对某人有所帮助,你应该尽量避免隐含的等待,尤其是Thread#sleep。如果你这样做Thread.sleep(10),你的代码将始终等待10秒钟,即使你的页面在1秒后准备就绪。因此,如果你经常使用,这会大大降低你的测试速度

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

  3. # 3 楼答案

    最简单的

    试试这个,别想休息了!这段代码的等价物可以用在任何语言中。 我是用python写的

    import time
    time.sleep(2)
    

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

  4. # 4 楼答案

    这并不是硒特有的东西。你只想让java在加载页面之后,但在截图之前,睡一会儿

    Thread.sleep(4000);
    

    跟你的司机说。获取声明

  5. # 5 楼答案

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

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

    source

  6. # 6 楼答案

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

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