webdriver--设置元素等待

  • sleep():脚本执行到某一位置时“睡一会”,再继续执行;参数的单位是s;sleep方法由python的time模块提供,有两种引入和使用方式
    import time
    time.sleep(5)
    
    from time import sleep
    sleep(5)

    在未了解隐式等待这些方式时,sleep方法是我一直用的,有时想看看页面执行到某个位置时的数据显示,或页面跳转后定位新页面的元素等情况,页面执行太快看不到或者定位不到元素,都是通过“睡一会”的方式再继续进行

  • implicitly_wait():隐式等待,通过一定的时长等待页面上某元素加载完成,若超出时长还未加载出来则抛出NoSuchElementException异常
  1. 设置的时间并不是一个固定的等待时间,不影响脚本执行速度;
  2. 当脚本执行到某个元素定位时,如果可以定位继续执行;
  3. 定位不到时以轮询方式不断判断元素是否定位到,只要时间内定位到就继续执行,不必再等待剩余时长
  4. 在超时后,抛出异常    
     1 driver.get("http://www.zgckxt.com/THome/PC_SelfLearn/Index?id=1056&type=1")
     2 driver.find_element_by_xpath(".//*[@id='form1']/div/div/div[3]/div/div[1]/div[2]/div[1]/div[2]/a[1]/i").click()
     3 print(driver.current_url)
     4 
     5 #time.sleep(3)
     6 driver.implicitly_wait(3)
     7 try:
     8      print(driver.find_element_by_css_selector("div.m-battit").text)
     9 except NoSuchElementException as e:
    10      print(e)
    11 
    12 print(driver.current_url)

     

  • 显式等待,有些复杂用起来,暂不做研究

目前用起来sleep比较顺手,简单方便;隐式等待看起来处理机制更完美,更健全,也更灵活。在以后的尝试过程中两者灵活使用吧

posted @ 2016-08-24 22:14  单眼皮小眼睛  阅读(2105)  评论(0编辑  收藏  举报