selenium-元素的定位

Posted zouzou-busy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium-元素的定位相关的知识,希望对你有一定的参考价值。

前戏

元素的定位是自动化测试的核心,要想操作一个元素,首先应该识别这个元素。Webdriver 提供了一系列的元素定位方法,常用的有 id,name,class name,link text,partial link,tag name,xpath,css

讲定位之前先要了解说一下怎么定位,我们打开百度的首页,按F12,打开开发者工具,大概就是这个样子,点击Element,这里就是前端写的html代码,你在页面上所看到的页面就是通过HTML语言和CSS等前端语言展示在浏览器中的

技术图片

 

 技术图片

 

id定位

小需求:

打开百度首页,在搜索框里输入 selenium,python 等关键词,然后
点击搜索按钮,查看搜索页面

from selenium import webdriver
from time import sleep

drive = webdriver.Chrome()
drive.get(http://www.baidu.com)
sleep(3)
drive.find_element_by_id("kw").send_keys("selenium python")  # 通过 id 定位到搜索框,发送值 selenium python,find_element_by_id 查找元素通过 id
sleep(3)
drive.find_element_by_id("su").click()  # 通过 id 定位到搜索按钮,点击
sleep(3)
drive.quit()

这样就通过id定位到搜索框,通过send_keys给搜索框里传了selenium python关键字,然后定位到百度一下的按钮,click()点击

name定位

from selenium import webdriver
from time import sleep

drive = webdriver.Chrome()
drive.get(http://www.baidu.com)
sleep(3)
drive.find_element_by_name("wd").send_keys("英语")  # 通过 name定位到搜索框,发送值英语,
sleep(3)
drive.find_element_by_id("su").click()  # 通过 id 定位到搜索按钮,点击
sleep(3)
drive.quit()

tag_name定位

tag_name就是通过标签名定位

from selenium import webdriver
from time import sleep

drive = webdriver.Chrome()
drive.get(http://www.imooc.com)
drive.find_element_by_tag_name(input).send_keys(python)  # 定位标签名为 input 的第一个元素
drive.find_elements_by_tag_name(input)[0].send_keys(python)  # 定位标签名为 input 的元素,返回第一个
sleep(3)
drive.quit()

一般不通过标签名定位,因为他是从上到下依次取的

class_name

通过class属性值定位

from selenium import webdriver
from time import sleep

drive = webdriver.Chrome()
drive.get(http://www.baidu.com)
drive.find_element_by_class_name(s_ipt).send_keys(selenium)
drive.find_element_by_id(su).click()
sleep(3)
drive.quit()

通过超链接定位 link_text

selenium提供了两种超链接定位方式,第一种是链接文字(全部),第二种也是链接文字(部分文字)

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get(http://www.imooc.com)
driver.maximize_window()
driver.find_element_by_link_text(免费课程).click()
sleep(3)
driver.find_element_by_partial_link_text(后端).click()  # 通过部分文字定位
driver.quit()

CSS定位

Selenium 推荐使用 css 定位,而不是 xpath 来定位元素,原因是 css 定
位比 xpath 定位速度快,语法也更加简洁
Css 常用方法定位
(1) find_element_by_css_selector()
(2) #id                              id 选择器根据 id 属性来定位元素
(3) .class                          class 选择器,根据 class 属性值来定位元素
(4) [attribute=’value’]       根据属性来定位元素
(5) element>element       根据元素层级来定位 父元素>子元素

来具体看两个例子

例子一:

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.find_element_by_css_selector("#kw").send_keys(python)  # 通过 id=kw 定位到
driver.find_element_by_css_selector(.s_ipt).send_keys(selenium)  # 通过 class =s_ipt 定位


driver.find_element_by_css_selector("[autocomplete=‘off‘]").send_keys(python)  # 通过属性 autocomplete=off 定位
driver.find_element_by_css_selector(#su).click()
sleep(2)
driver.quit()

例子二:

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

driver.find_element_by_css_selector("[autocomplete=‘off‘]").send_keys(python)  # 通过属性 autocomplete=off 定位

driver.find_element_by_css_selector(form#form>span>input).send_keys(6666)
# 通过层级定位到输入框,先定位到id=form 的上级标签 form 上,在定位到下级 span 上,最后定位到第一个 input 标签
driver.find_element_by_css_selector(#su).click()
sleep(2)
driver.quit()

 

不知道大家看懂上面的定位方式了没,官方说比较简洁,但是我没觉得哪里简洁,我只是在学的时候用过CSS定位,在实际的工作中从来没有用过CSS定位。也许我比较菜吧,啊哈哈哈哈哈

下节来讲下xpath定位,也是我使用最多的定位,xpath定位功能十分的强大

 

以上是关于selenium-元素的定位的主要内容,如果未能解决你的问题,请参考以下文章

selenium webdriver怎么定位td里面的元素

Python爬虫 Selenium -- Selenium元素定位Selenium访问元素信息Selenium交互

selenium IDE 如何定位页面变动元素

selenium+Python页面元素定位问题

selenium之css定位小结

selenium 如何缩小范围后在定位元素比如缩小到某一个div,在定位