webdriver api元素等待方式

如今很多web都在使用AJAX技术,运用这种技术的软件当浏览器加载页面时,页面上的元素可能不会被同步加载完成,如此一来,定位元素时就会出现困难。我们可以通过设置元素等待来改善这类问题导致的测试脚本不稳定。

webdriver提供了三种元素等待方式:

        强制等待:

                time.sleep(5),单位是s。休眠的意思,就是直接让线程休眠,这几秒啥事也不干。

        隐式等待:

                在脚本创建driver对象之后,给driver设置一个全局的等待时间,对driver的整个生命周期(创建到关闭)都起效。如果在设置等待时间内,定位到了元素则不再等待,继续执行下面的代码。如果超出了等待时间,则抛出异常。driver.implicity_wait(10)

注意:     在使用隐式等待的时候,实际上浏览器会在你自己设定的时间内部不断的刷新页面去寻找我们需要的元素

import pytest
from selenium import webdriver
import time

driver = webdriver.Chrome(executable_path=r"C:\Users\think\Desktop\chromedriver")
driver.implicitly_wait(10)

driver.get("http://www.baidu.com")
print(driver)
driver.quit()

        显示等待:

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

        方法:WebDriverWait(driver,timeout,pool_frequency=0.5,ignored_exceptions=None)

        until(method,info):直到满足某一个条件,返回结果,等不到就抛错

        method---->excepted_conditions.presence_of_element_located(locator):判断某个元素是否定位到了

        locator------>By.Id,By.Name

注意:若同时设置了隐式等待,则以隐式等待为第一优先级,也就是说,若隐式等待时间大于显示等待,显示等待时间设置无效,因为driver若找不到元素,会先等待隐式等待的时间。

import time

from selenium import webdriver
from selenium.webdriver.support.ui import  WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Chrome(executable_path=r"C:\Users\think\Desktop\chromedriver")
driver.get('https://www.baidu.com')

ele = WebDriverWait(driver,10,0.5,ignored_exceptions=None).until(EC.presence_of_element_located((By.ID,'kw')),'找不到')
if ele:
    ele.send_keys('selenium')
    time.sleep(3)
else:
    print(ele)

driver.quit()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值