• python3.6+selenium_显示等待和隐式等待


    1.隐式等待

      隐式等待,就是在创建driver时,为浏览器对象创建一个最长等待时间,这个方法是得不到某个元素就等待,直到拿到元素位置(如果一直拿不到就等到时间截止),再执行下一步。

      注意这里有一个弊端,那就是程序会一直等待整个页面加载完成(浏览器标签栏那个小圈不再转),才会执行下一步,但有时候页面想要的元素早就加载完成了,但是因为个别js之类的东西特别慢,仍得等到页面全部完成才能执行下一步,我想等我要的元素出来之后就下一步怎么办?这就要用到显性等待wait了。

    2.显示等待

      显示等待,(使用driver.implicitly_wait(1)) 就是明确的要等到某个元素的出现或者是某个元素的可点击等条件,等不到,就一直等,除非在规定的时间之内都没找到,那么就跳出NoSushElementException
    (简而言之,就是直到元素出现才去操作,如果超时则报异常)

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time : 2018/12/6 16:32
    # @File : unittest_test5_1.py
    
    '''显示等待'''
    import unittest
    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions
    class LoginAlert(unittest.TestCase):
        def setUp(self):
            self.driver = webdriver.Chrome()
            self.driver.maximize_window()
            self.driver.get('https://www.baidu.com/?tn=91694651_hao_pg')
    
        def test_baidu_login_alert(self):
            search_filed = self.driver.find_element_by_id('kw')
            search_filed.clear()
            search_filed.send_keys('phones')
            search_filed.submit()
    
            #自定义的预期条件判断检测搜索框的class属性值
            WebDriverWait(self.driver,10).until(lambda s:s.find_element_by_id('kw').get_attribute('class')=='s_ipt')
    
            #等待页面出现‘百度首页’的时候再进行下一步操作
            search_filed_over = WebDriverWait(self.driver,10)
                .until(expected_conditions.visibility_of_element_located((By.LINK_TEXT,u'百度首页')))
    
            #点击登录
            self.driver.find_element_by_xpath('//*[@id="u"]/a[3]').click()
    
            '''
            如果页面有alert弹窗,可以用alert_is_present()方法
            alert = WebDriverWait(self.driver,10)
                .until(expected_conditions.alert_is_present())
            '''
    
            #待弹出页面上的‘x’可点时才可进行下一步操作
            search_login_text = WebDriverWait(self.driver,10)
                .until(expected_conditions.element_to_be_clickable((By.ID,'TANGRAM__PSP_4__closeBtn')))
            search_login_text.click()
    
    
        def tearDown(self):
            self.driver.quit()
    
    if __name__=='__main__':
        unittest.main(verbosity=2)
  • 相关阅读:
    Win10新建文件不自动刷新
    解决 Win10 系统新建文件夹后需手动刷新才能显示
    新建的文件需要刷新才能看见怎么办?
    win7、win10系统电脑开机后小键盘灯不亮怎么办?
    VMware Workstation 将虚拟机挂起后,电脑会很卡,SCSI转换成IDE就可以了
    如何把VMware Workstation使用的虚拟SCSI磁盘转换成虚拟IDE硬盘
    bat批处理文件怎么将路径添加到path环境变量中
    在Windows下使用svn命令行教程及svn命令行的解释
    php正确解码javascript中通过escape编码后的字符
    采集/自动登录啊都可以用这两个方法实现 asp.net
  • 原文地址:https://www.cnblogs.com/xiuxiu123456/p/10435719.html
Copyright © 2020-2023  润新知