wait

场景

Wait类的使用场景是在页面上进行某些操作,然后页面上就会出现或隐藏一些元素,此时使用Wait类的until方法来等待这些效果完成以便进行后续的操作。另外页面加载时有可能会执行一些ajax,这时候也需要去Wait的until的等待ajax的请求执行完毕。

具体一点的例子前面也曾出现过,点击一个链接然后会出现一个下拉菜单,此时需要先等待下拉菜单出现方可进行点击菜单项的操作。

在实例化Wait类时,可以传入以下的一些参数

  • timeout。总共等待多久,默认5s
  • interval。每隔多久检查一次代码块里的值,默认0.2秒
  • message。如果超时则显示message
  • ignored。代码块中忽略的异常。也就是说如果代码块中抛出了这个异常,那么webdriver将忽略这个异常,继续进行等待,直到满足下面所列举的退出条件为止。默认情况下NoSuchElement异常是被忽略的。

until方法会一直等下去,直到

  • 代码块中的内容为true(不为false或没有抛出异常)
  • 超时,也就是超过了timeout设置的时间

代码

下面代码演示了点击按钮后如何等待label出现。这个例子其实没有前面的下拉菜单例子实用。

wait.html

  <html>
    <head>
      <meta http-equiv="content-type" content="text/html;charset=utf-8" />
      <title>wait</title>        
      <script type="text/javascript" async="" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
      <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet" />        
      <script type="text/javascript">
        $(document).ready(function(){
            $('#btn').click(function(){
              $('<p><span class="label label-info">waitr-webdriver</span></p>').css('margin-top', '1em').insertAfter($(this));
              $(this).addClass('disabled').unbind('click');
            });
        });
      </script>
    </head>

    <body>
      <div class="row-fluid">
        <div class="span6 well">        
          <h3>wait</h3>
          <button class="btn btn-primary" id="btn" >Click</button>
        </div>        
      </div>        
    </body>
    <script src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
  </html>

wait.rb

  #encoding: utf-8
  require 'selenium-webdriver'

  dr = Selenium::WebDriver.for :chrome
  file_path = 'file:///' + File.expand_path(File.join('.', 'wait.html'))
  dr.get file_path

  # 点击按钮
  dr.find_element(:id, 'btn').click()

  wait = Selenium::WebDriver::Wait.new()
  wait.until { dr.find_element(class: 'label').displayed? }

  sleep(2)
  dr.quit()

results matching ""

    No results matching ""