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"







原文地址:https://www.cnblogs.com/heertong/p/12293131.html