• 等待时间的三种方法


    在执行自动化脚本的时候,很多时候会遇到定位不到控件而报错,先不要急于寻求他人,先自己排除以下情况。主要有俩点原因,1.脚本运行速度比页面加载速度快 2.frame框架,第二种只要用switch_to.frame('默认是iframe标签的id')跳转到该框架,然后再进行定位操作,下面主要讲下第一种情况。

    加等待时间,主要有等待方法

    1.sleep()  ,强制等待,图方便,很多时候采用这种方法,但是它是强制等待,如sleep(5),必须等待5秒才会进行后面的操作,不管页面有没有加载完,问题是,如果页面完全加载完时间大于5秒,也会定位不到控件,而且比较死板,不灵活,如果大量使用该方法会使脚本运行速度变慢

    2.imolicitly_wait(),隐性等待,直接看代码分析

    class TestLogin(unittest.TestCase):
        def setUp(self):
           print ('start:')
           self.driver = webdriver.Firefox()
           self.url = 'https://mail.tom.com/'
           self.driver.implicitly_wait(5) #此处就是隐性等待5秒
         #正确用户名和密码登录
        def test1(self):
            u'''用户名正确,密码正确'''
            driver=self.driver
            driver.get(self.url)
    标记的就是隐性等待5秒,全局都起作用,所以只要写一个就可以,隐性等待设置了一个最长的等待时间5秒,在5秒内若页面加载完成,继续下一步,否则一直等待知道满足最大时间,然后抛出异常。
    注意他也有弊端,这里页面加载是直到完全加载才执行后面程序,这就导致了如果5秒内已经加载出我们想要的元素,它还会等待完全加载完才执行下一步,这也导致了脚本运行速度变慢

    3.WebDriverWait(),显示等待,这里需要导入三个模块:
    from selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.common.by import By
    from selenium import webdriver

    #例如定位百度搜索框

    driver=webdriver.Chrome()

    driver.get('www.baidu.com')

    element=driver.find_element_by_id('kw)

    WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id('kw))
    通过匿名函数像until传入一个方法,这里千万不能直接传定位的元素对象,必须是方法,这句代码就是循环检测百度搜索框有没有出现,若在10秒内加载出现此元素,自动继续后面的操作,若没有出现,则抛异常
    element.send_keys('test')
     
    接下来是介绍通过expected_conditions类中方法来判断元素是否出现
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from selenium import webdriver
    
    #例如定位百度搜索框
    
    driver=webdriver.Chrome()
    
    driver.get('www.baidu.com')
    
    element=WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw'))) 
    通过expeted_conditions类中方法判断元素是否出现,然后返回该元素对象,我们可以通过一个变量直接接受该变量然后进行点击,编辑。。。操作
    element.send_keys('test')

    
    
    expeted_conditions类中还有很多判断元素的各种条件,可以百度去看看
    
    


     
  • 相关阅读:
    AC3 encoder flow
    AC3 IMDCT
    AC3 Rematrix
    AC3 channel coupling
    AC3 mantissa quantization and decoding
    AC3 bit allocation
    AC3 exponent coding
    C# 判断字符串为数字 int float double
    vs 修改默认的调试浏览器
    visio 如何扩大画布大小
  • 原文地址:https://www.cnblogs.com/lz-tester/p/8487202.html
Copyright © 2020-2023  润新知