Java+Selenium智能等待页面加载完成

发表于:2021-8-25 09:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:小坦克    来源:博客园

  我们经常会碰到用selenium操作页面上某个元素的时候, 需要等待页面加载完成后, 才能操作。  否则页面上的元素不存在,会抛出异常,或者碰到AJAX异步加载。我们需要等待元素加载完成后, 才能操作。selenium 中提供了非常简单,智能的方法,来判断元素是否存在。
  实例要求 
  实例:set_timeout.html 下面的html 代码,  点击click 按钮5秒后, 页面上会出现一个红色的div快, 我们需要写一段自动化脚本智能的去判断这个div是否存在, 然后把这个div 然后高亮。
  <html>
      <head>
          <title>Set Timeout</title>
          <style>
              .red_box {background-color: red; width = 20%; height: 100px; border: none;}
          </style>
          <script>
              function show_div(){
                  setTimeout("create_div()", 5000);
              }
    
              function create_div(){
                  d = document.createElement('div');
                  d.className = "red_box";
                  document.body.appendChild(d);
              }
          </script>
      </head>
      <body>
          <button id = "b" onclick = "show_div()">click</button>
      </body>
  </html>
  隐式等待
          WebDriver driver = new FirefoxDriver();
          driver.get("file:///C:/Users/Tank/Desktop/set_timeout.html");    
          
          driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
          WebElement element = driver.findElement(By.cssSelector(".red_box"));      
          ((JavascriptExecutor)driver).executeScript("arguments[0].style.border = \"5px solid yellow\"",element);  
  其中
  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
  意思是, 总共等待10秒, 如果10秒后,元素还不存在,就会抛出异常  org.openqa.selenium.NoSuchElementException
  显式等待
  显式等待 使用ExpectedConditions类中自带方法, 可以进行显试等待的判断。 
  显式等待可以自定义等待的条件,用于更加复杂的页面等待条件。
  只有满足显式等待的条件满足,测试代码才会继续向后执行后续的测试逻辑。如果超过设定的最大显式等待时间阈值, 这测试程序会抛出异常。 
      public static void testWait2(WebDriver driver)
      {
          driver.get("E:\\StashFolder\\huoli_28@hotmail.com\\Stash\\Tank-MoneyProject\\浦东软件园培训中心\\我的教材\\Selenium Webdriver\\set_timeout.html");    
          
          WebDriverWait wait = new WebDriverWait(driver, 20);
          wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".red_box")));
          WebElement element = driver.findElement(By.cssSelector(".red_box"));      
          ((JavascriptExecutor)driver).executeScript("arguments[0].style.border = \"5px solid yellow\"",element);  
      }

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号