zoukankan      html  css  js  c++  java
  • python-selenium笔记之元素定位

    selenium用于web应用程序的自动化测试工具,支持多种浏览器、多种脚本语言编写及录制的工具。

    测试过程可以使用python+selenium进行做UI界面自动化,UI界面自动化一个基础核心是元素定位。

    selenium提供了单元素定位和多元素定位,2种方式都有8种元素定位方式:

    单元素定位方法:

    find_element_by_id:通过元素id属性定位  (find_elements_by_id:多元素定位,返回是列表定位位置,默认定位到第一个,索引是从0开始,其他几种多元素定位类似)
    find_element_by_name:通过元素name属性定位
    find_element_by_xpath:通过元素xpath定位
    find_element_by_tag_name:通过元素标签名属性定位
    find_element_by_link_text:通过元素文本链接属性定位
    find_element_by_partial_link_text:通过元素部分文本链接属性定位
    find_element_by_class_name:通过元素类属性名定位
    find_element_by_css_selector:通过元素css定位

    多元素定位方法:
    find_elements_by_id:通过元素id属性定位,多元素定位,返回是列表定位位置,默认定位到第一个,索引是从0开始,其他几种多元素定位类似
    find_elements_by_name:通过元素name属性定位
    find_elements_by_xpath:通过元素xpath定位
    find_elements_by_tag_name:通过元素标签名属性定位
    find_elements_by_link_text:通过元素文本链接属性定位
    find_elements_by_partial_link_text:通过元素部分文本链接属性定位
    find_elements_by_class_name:通过元素类属性名定位
    find_elements_by_css_selector:通过元素css定位
    下面看一下实例:
    定位百度输入框,下面是对应的html代码

    1 from selenium import webdriver
    2 from selenium.webdriver.common.by import By
    3 
    4 driver = webdriver.Chrome()
    5 driver.find_element_by_id("kw")
    6 driver.find_element_by_name("wd")
    7 driver.find_element_by_xpath('//*[@id="kw"]')
    8 driver.find_element_by_css_selector('#kw')
    9 driver.find_element_by_class_name('s_ipt')

    定位新闻链接:

    1 driver.find_element_by_link_text("新闻")
    2 driver.find_element_by_partial_link_text('')

    tag_name标签名称定位一般用于定位多元素定位

    通过input标签查找百度输入框,返回是列表,索引是从0开始

    1 s = driver.find_elements_by_tag_name("input")
    2 print(s[7].get_attribute('id'))
    在做界面测试时经常会遇到因页面加载慢或者网速问题,导致元素加载出来时间不确定,脚本执行不稳定,因此在找出元素时可以进行增加显示等待时间,
    增加脚本的稳定性,可以对定位元素的方法进行二次封装
    from selenium import webdriver
    from selenium.common.exceptions import TimeoutException
    from selenium.webdriver.support.wait import  WebDriverWait
    from selenium.webdriver.common.by import By
    
    class Page():
        def __init__(self,driver):
            self.driver = driver
    
    
        def find_element(self,*loc):
            try:
                wait = WebDriverWait(self.driver,timeout = 10)
                wait.until(lambda x:x.find_element(*loc).is_displayed())
                return self.find_element(*loc)
            except TimeoutException:
                raise "Time out"
    
    
        def find_elements(self,*loc):
            try:
                wait = WebDriverWait(self.driver,timeout = 10)
                wait.until(lambda x:x.find_elements(*loc).is_displayed())
                return self.find_elements(*loc)
            except TimeoutException:
                raise "Time out"







  • 相关阅读:
    和为S的两个数字
    和为S的连续正数序列
    两个链表的第一个公共结点
    删除链表中重复的结点
    常用开发工具的安装(JDK、IDEA、Tomcat、Maven、Mysql和Nodepad++)——实习日志7.10
    蓄水池取样(转)
    prepare statement
    ProxySQL Getting started
    架构收录
    服务开机自启动
  • 原文地址:https://www.cnblogs.com/heertong/p/12293131.html
Copyright © 2011-2022 走看看