美文网首页
四、Selenium八大定位

四、Selenium八大定位

作者: 叫我松鼠哥哥 | 来源:发表于2019-11-09 11:36 被阅读0次

Selenium提供了八种不同的定位方式:id,name,xpath,tag name,class name,link_text,partial link text,css selector
定位优先级:id,name,classname,css,xpath


图片1

一、id定位:find_element_by_id

示例:在百度搜索框中输入字符

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://wwww.baidu.com')
driver.find_element_by_id('kw').send_keys('sunsk')
# 等待5秒
sleep(5)
# 退出
driver.quit()

二、name定位:find_element_by_name

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://wwww.baidu.com')
driver.find_element_by_name("wd").send_keys('sunsk')

三、class定位:find_element_by_class_name

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com");
driver.find_element_by_class_name("s_ipt").send_keys("sunsk")

四、link_text定位:find_element_by_link_text

link_text是以超链接全部名字作为关键字来定位元素的,所以用此方法定位元素超链接,中文字需要写全
以百度新闻为例
driver.find_element_by_link_text("新").click():报错
因为是精确定位,所以找不到时会报错
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"link text","selector":"新"}
如下为正确写法

from time import sleep

from selenium import webdriver

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

driver.find_element_by_link_text("新闻").click()
百度新闻

五、partial_link_text:find_element_by_partial_link_text

partial_link_text 用超链接的部分文字来定位元素

from time import sleep
from selenium import webdriver

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

driver.find_element_by_partial_link_text("新").click()

六、tag_name定位:find_element_by_tag_name

通过标签名称定位

tag_name
如下代码打印结果为:f
from time import sleep
from selenium import webdriver

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

print(driver.find_element_by_tag_name("form").get_attribute("name"))

七、Xpath定位:必须使用唯一的属性定位,否则不唯一的话会报错

用途:在xml文档中寻找节点
优点:XPath比CSS定位更加灵活。Xpath可以向前搜索,也可以向后搜索;CSS定位只能向前搜索
缺点:XPath定位速度比CSS慢
使用示例(使用Xpath定位,在马蜂窝登陆中添加手机号和密码):

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://passport.mafengwo.cn")

# 通过相对路径的方式
#driver.find_element_by_xpath("/html/body/div[1]/div/div/div[2]/div[1]/div[1]/form/div[1]/input").send_keys("1851461993")
#通过绝对路径的方式(通过input标签的id属性)
# driver.find_element_by_xpath('//*[@id="_j_login_form"]/div[1]/input').send_keys("1851461993")
#通过绝对路径的方式(通过input标签的name属性)报错了。因为html中有多个name为passport的input框
# driver.find_element_by_xpath("//*[@name='passport']").send_keys("1851461993") 
#通过绝对路径的方式(通过input标签的type属性)
driver.find_element_by_xpath("//*[@type='password']").send_keys("1111")

sleep(3)
driver.close()

获取xpath的方式:1、copy xpath(绝对路径)2、copy full xpath(相对路径)


获取xpath
靠自己的智慧获得xpath

八、CSS定位:find_element_by_css_selector

CSS选择器具体参考如下链接
https://www.w3school.com.cn/cssref/css_selectors.asp
常用的如下图

常用的CSS选择器
from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.baidu.com')

# 通过class="s_ipt定位
# driver.find_element_by_css_selector(".s_ipt").send_keys("sunsk")
# 通过id="kw"定位
# driver.find_element_by_css_selector("#kw").send_keys("sunsk")
# 通过input框中的的name属性定位
# driver.find_element_by_css_selector("input[name='wd']").send_keys("sunsk")
# 使用元素在页面中的绝对路径来定位
driver.find_element_by_css_selector("html>body>div>div>div>div>div>form>span>input[name='wd']").send_keys("sunsk")
sleep(1)
driver.close()

Selenium 3+Python 3 自动化测试项目实战 从菜鸟到高手 田春成 李靖 /著

相关文章

网友评论

      本文标题:四、Selenium八大定位

      本文链接:https://www.haomeiwen.com/subject/jwpevctx.html