zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    英飞凌TLE9461V33 SBC芯片
    Lin总线诊断级别定义 CLASS I 、II 、III
    AUTOSAR_SWS_CANInterface 阅读
    AUTOSAR_SWS_CANTransceiverDriver 阅读
    VS2013 快捷键
    Can总线空闲状态时候,TX,RX电平
    postman
    题目2
    Robot Framework 自动化测试
    银行测试 http://blog.csdn.net/stillming/article/details/42275251
  • 原文地址:https://www.cnblogs.com/xiuxiu123456/p/10435719.html
Copyright © 2011-2022 走看看