selenium+python之元素定位方式介绍

      网页自动化测试最基本的要求就是要定位到各个元素,然后才能对该元素进行各种操作(输入,点击,清除,提交等),所以今天来总结下Selenuim+Python最基本的几种定位方式及实例说明, 以百度搜索输入框为例,用谷歌浏览器具体说明各个定位方式的用法。

      1.导入selenium包的webdriver方法

     输入 from selenium import webdriver

     2.从 time 模块中引入sleep函数,使用sleep函数可以让程序休眠

     输入 from time import sleep

     3.打开浏览器

    (1)获取浏览器驱动,并打开谷歌浏览器,注意浏览器的第一个字母要大写

      dr=webdriver.Chrome()

    (2)打开被测网页

      url = "https://www.baidu.com/"

      dr.get(url)

     4.元素定位方法

    (1)通过id定位----find_element_by_id()

      实例:dr.find_element_by_id("kw").send_keys("selenium自动化") #输入搜索关键字

      

     注意点:id值必须是唯一的,id值是动态变化的,则不能使用该方法定位。

    (2)通过name定位----find_element_by_name()

      实例:dr.find_element_by_name("wd").send_keys("selenium自动化") #输入搜索关键字

     注意点:name值也必须是唯一的。

    (3)通过class_name定位----find_element_by_class_name()

      实例:dr.find_element_by_class_name("s_ipt").send_keys("selenium自动化") #输入搜索关键字

     注意点:class_name的值也必须是唯一的。

    (4)通过link_text定位----find_element_by_link_text()

      实例:dr.find_element_by_link_text("新闻").click()#点击按钮

     注意点:link_text的值也必须是唯一的。

    (5)通过partial_link_ text模糊文字定位----find_element_by_partial_link_text()

     实例:dr.find_element_by_partial_link_text("改革开放").click() #点击按钮

     注意点:link_text的值也必须是唯一的。

    (6)通过tag_name定位----find_element_by_tag_name()

     实例:dr.find_element_by_tag_name("input").send_keys("selenium自动化") #输入搜索关键字

     标签名字最容易重复,当定位一组数据时,可使用

     inputBoxes = dr.find_elements_by_tag_name("input")

     for inputBox in inputBoxes:

         if inputBox.get_attribute("maxlength") == "255" and \
            inputBox.get_attribute("sautocomplete") == 'off':
             inputBox.send_keys("selenum自动化")

    (7)通过xpath定位,XPath是一种XML文档中定位元素的语言----find_element_by_xpath()

     (7.1).根据绝对路径来定位

     path1="/html/body/div/div/div/div/div/form/span/input"

     dr.find_element_by_xpath(path1).send_keys("selenum自动化") #输入搜索关键字

     (7.2).根据元素属性定位

     dr.find_element_by_xpath("//input[@autocomplete='off']").send_keys("selenum自动化")#输入搜索关键字

     (7.3).根据通过多个属性组合定位

     dr.find_element_by_xpath("//input[@autocomplete='off' and @id='kw']").send_keys("selenum自动化")#输入搜索关键字

     注意点:括号内的引号和方括号内的引号不能一样。

     (7.4).通过层次与属性组合定位

     path1 = "//span/input[@class='s_ipt']"

      dr.find_element_by_xpath(path1).send_keys("selenum自动化")#输入搜索关键字

      8.通过CSS定位----find_element_by_css_selector()

    (8.1).通过class属性

      dr.find_element_by_css_selector(".'s_ipt").send_keys("selenum自动化")#输入搜索关键字

      注意点:.号表示通过class属性来定位元素

      (8.2).通过id属性定位元素

      dr.find_element_by_css_selector("#kw")

      注意点:#号表示通过id属性来定位元素

      (8.3).通过标签名定位元素

      dr.find_element_by_css_selector("input")

      (8.4)通过属性定位元素(挺常用的)

      dr.find_element_by_css_selector("[name='wd']")

      dr.find_element_by_css_selector("[maxlength='255']")

      属性值包含某个值

      属性值包含wd:适用于由空格分隔的属性值。

      dr.find_element_by_css_selector("[name~='wd']")

     (8.5)通过层级的父子定位元素

     查找有父亲元素的标签名为span,它的所有标签名叫input的子元素

     dr.find_element_by_css_selector("span>input") 

     (8.6)通过层级与属性组合定位

     标签名#id属性值:指的是该input标签下id属性为kw的元素

     dr.find_element_by_css_selector("input#kw")

     标签名.class属性值:指的是该input标签下class属性为s_ipt的元素

     dr.find_element_by_css_selector("input.s_ipt")

     标签名[属性=’属性值‘]:指的是该input标签下name属性为wd的元素

    dr.find_element_by_css_selector("input[name='wd']")

     父元素标签名>标签名.class属性值:指的是span下的input标签下class属性为s_ipt的元素

     dr.find_element_by_css_selector("span>input.s_ipt")

     9.通过By定位元素

     定位的类型包括By.ID,By.NAME,By.CLASS_NAME,By.TAG_NAME,By.LINK_TEXT,By.PARTIAL_LINK_TEXT,By.XPATH,By.CSS_SELECTOR

     具体定位方式参考上方1-8的说明。

     实例:dr.find_element(By.ID,'kw')

     注意:使用By定位方式,需先导入By类。

     

     5.实例登录QQ邮箱

     #导入selenium包的webdriver方法

     from selenium import webdriver
     #导入By类
     from selenium.webdriver.common.by import By
     #引入sleep函数
     from time import sleep
     #获取浏览器驱动,并打开浏览器
     dr=webdriver.Chrome()
     url="https://mail.qq.com/"
     dr.get(url)
     sleep(2)
     #将浏览器窗口最大化
     dr.maximize_window()
     sleep(2)
     #定位表单位置
     frame = dr.find_element_by_id('login_frame')
     dr.switch_to.frame(frame)
     dr.find_element_by_id('switcher_plogin').click()
     #输入用户名密码,并点击登录按钮
     dr.find_element_by_id('u').send_keys('****@qq.com')
     dr.find_element_by_id('p').send_keys('password')
     dr.find_element_by_id('login_button').click()
     dr.switch_to_default_content()

猜你喜欢

转载自www.cnblogs.com/xyx-001/p/9494460.html
今日推荐