zoukankan      html  css  js  c++  java
  • web自动化测试(3)--元素操作之等待wait

    我们在进行元素定位的过程中,可能会出现no such element:Unable to locate elementd的错误提示。

    出现这一问题可能有如下3方面的原因,分别是:

    (1)元素定位表达式有误

    定位方案:在html页面中,通过按F12后输入定位表达式确认是否有误

    (2)等待不到位

    定位方案:在代码运行的过程中,通过自动截图查看页面的状态

    (3)元素在iframe中,即在当前的html页面中内嵌了另外一个html页面

    解决方案:

      3.1、分辨元素是否在iframe中;

      3.2、若在,从当前的html页面中切换到iframe当中的html中,然后再进行元素的定位。

    本节中,主要针对等待不到位导致元素无法定位的问题,给出相应的解决方案:在元素查找查找定位执行进行相应的等待,以确保页面加载完成。

    等待主要可以划分为:强制等待和智能等待

    一、强制等待

    sleep -- 强制方式,无论页面是否加载完成,等待时间未达到,无法进行其他业务操作。  (可以作为辅助)

    二、智能等待

    1、隐式等待 -- implicity_wait(了解即可)

     1.1、每个会话只需调用一次;

     1.2、找到元素后,执行元素操作。

    补充说明:

    假设隐式等待的时间设置为10秒,

    首先,我们需要明确的是这10秒并非一个固定的等待时间,它并不影响脚本的执行速度;

    其次,隐式并不是针对页面上的某一元素进行等待。当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。假设在第6秒定位到了元素则继续执行,若直到超出设置的时长10秒还没有定位到元素,则抛出异常。

    2、显示等待(掌握)

    使用显示等待需要引入WebDriverWait类以及期望条件(expected_condition)

    WebDriverWait(driver,timeout,查看周期=0.5).until(条件)

    常见的条件有:

    (1)元素存在:presence_of_element_located

    (2)元素可见:visibility_of_element_located

    (3)元素可点击:element_to_be_clickable

    说明:

    元素在页面中存在,但是不一定可见;但是元素可见,该元素一定在页面中存在。

    比如我们在实际应用中可能会遇到元素可以定位成功,但是在对元素进行操作时报错提示元素没有找到的问题。

    出现这种情况,可能是元素的什么属性导致了元素不可见,如hidden=“hidden”就能导致当前元素不可见。

    因此在设置期望条件时要根据自己的业务需求进行合理的设置。一般情况下,设置元素可见就可以解决大部分的需求了。

    附录:

     1 from selenium import webdriver
     2 from selenium.webdriver.common.by import By
     3 from selenium.webdriver.support.wait import WebDriverWait
     4 from selenium.webdriver.support import expected_conditions as EC
     5 
     6 driver = webdriver.Chrome()
     7 driver.get("http://www.baidu.com")
     8 
     9 wait = WebDriverWait(driver,20)
    10 
    11 login_btn_loc = (By.ID,'s-top-loginbtn')    # 登录元素定位
    12 wait.until(EC.visibility_of_element_located(login_btn_loc))     # 等待元素可见
    13 driver.find_element(*login_btn_loc).click()    # 查找元素并进行点击操作
    14 
    15 # 点击显示登录界面
    16 login_loc = (By.XPATH,'//p[@title="用户名登录"]')
    17 wait.until(EC.visibility_of_element_located(login_loc))
    18 driver.find_element(*login_loc).click()
    19 
    20 # 在登录页面输入用户名和密码,并提交登录信息
    21 user_loc = (By.ID,"TANGRAM__PSP_11__userName")     
    22 pwd_loc = (By.ID,"TANGRAM__PSP_11__password")
    23 submit_loc = (By.ID,"TANGRAM__PSP_11__submit")
    24 wait.until(EC.visibility_of_element_located(submit_loc))
    25 driver.find_element(*user_loc).send_keys("18272165137")   # 输入用户名
    26 driver.find_element(*pwd_loc).send_keys("12345678")    # 输入密码
    27 driver.find_element(*submit_loc).click()   # 登录提交
  • 相关阅读:
    实验四附加实验 项目互评
    201671010413葛进花+《英文文本统计分析》结对项目报告
    201671010413葛进花 词频统计软件项目报告
    201671010413葛进花实验三作业互评与改进报告
    实验一 软件工程准备
    201671010418 刘佳 实验十四 团队项目评审&课程学习总结
    201671010418 刘佳 实验四附加实验 项目互评
    201671010418 刘佳 《英文文本统计分析》结对项目报告
    201671010418刘佳 实验二词频统计项目报告
    201671010418刘佳 实验三作业互评与改进报告
  • 原文地址:https://www.cnblogs.com/yif930916/p/14792915.html
Copyright © 2011-2022 走看看