selenium(1)-详细解读元素定位的八种方式

摘要:
安装selenium和下载webdriver安装seleniumpipinstallseleniumpipinstallselenium-U(判断是否有最新版本)下载driverGoogle:http://npm.taobao.org/mirrors/chromedriver/或者是https://chromedriver.storage.googleapis.com/index.html打开找到
安装selenium和下载webdriver

安装selenium

  • pip install selenium
  • pip install selenium -U (判断是否有最新版本)

下载driver

Google:http://npm.taobao.org/mirrors/chromedriver/或者是https://chromedriver.storage.googleapis.com/index.html打开找到对应的浏览器驱动下载

firefox:https://github.com/mozilla/geckodriver/releases打开找到对应的浏览器驱动下载

selenium(1)-详细解读元素定位的八种方式第1张

一个百度小demo

#!/usr/bin/env python#-*- coding: utf-8 -*-

"""__title__  =
__Time__   = 2020/6/17 13:48
__Author__ = xinhua
__Blog__   = https://www.cnblogs.com/xinhua/
"""
importtime

from selenium importwebdriver

#加载浏览器驱动
driver = webdriver.Chrome(r"C:python3.6chromedriver.exe")

#访问网址
driver.get("http://www.baidu.com")

#找到搜索框
inputElement = driver.find_element_by_id("kw")

#输入搜索内容
inputElement.send_keys("xinhua19")

#找到搜索按钮
searchElement = driver.find_element_by_id("su")

#点击搜索按钮
searchElement.click()

time.sleep(5)

#释放资源, 退出浏览器
driver.quit()

总结

可以看到,流水账式写Web自动化测试代码的顺序就是:加载驱动 - 访问链接 - 页面操作

元素定位八种方式

首先我们可以搭建1个禅道,后续演示可以使用禅道,禅道地址是IP:port/zentao,禅道搭建方法可以参考我的另外一篇博客https://www.cnblogs.com/xinhua19/p/13151296.html

方法一 :通过元素id定位

1 #找到id=account的元素
2 username = driver.find_element_by_id("account")
3 #输入值
4 username.send_keys("admin")

知识点:在前端,一般id是唯一的,只属于1个元素,通过id定位到的元素是唯一的

方法二:通过元素的class

selenium(1)-详细解读元素定位的八种方式第2张

1 #通过 元素Class查找(仅返回匹配到的第一个)
2 username = driver.find_element_by_class_name("form-control")
3 username.send_keys("admin")

知识点

  • 在前端,一般多个元素共用一个class
  • find_element_by_class_name只返回第一个匹配到class的元素
  • 坏处:当找不到元素则报错
  • 如果想返回所有匹配到class的元素,可看下面代码
1 elements = driver.find_elements_by_class_name("form-control")
2 for i inelements:
3     print(i)

知识点

  • 返回的是一个元素列表,若只匹配到一个也是列表
  • 好处:当没有找到元素时不会报错,而是返回空列表 []

方法三:通过元素的name

1 #通过 元素name查找元素(仅返回匹配到的第一个)
2 password = driver.find_element_by_name("password")
3 password.send_keys("123")

知识点

  • 和class一样,也有可能有多个元素共用一个name
  • find_element_by_name只返回第一个匹配到name的元素
  • 想返回多个的话,和class一样,需要调用find_elements_by_name方法,这里不再赘述,写法和上面一致

方法四:通过元素标签tag_name

1 #=====通过 元素标签(仅返回匹配到的第一个)=====
2 p = driver.find_element_by_tag_name("th")
3 #打印元素的文本值
4 print(p.text)
5 
6 print("===分割线")
7 #=====通过 元素标签(返回匹配到的所有元素)=====
8 ps = driver.find_elements_by_tag_name("th")
9 for p inps:
10     print(p.text)

执行结果

1 用户名
2 ===分割线
3 用户名
4 密码

知识点

  • 多个元素同种HTML标签见怪不怪了
  • 同样的,find_element_by_tag_name返回第一个匹配到标签的元素
  • find_elements_by_tag_name可以返回所有匹配到标签的元素

方法五:通过超链接文本link_text(精确匹配)

atext = driver.find_element_by_link_text("创建账号")

  • find_element_by_link_text是精确匹配,需要文本完全相同才能匹配
  • 若需要返回全部匹配到的元素,也需要用find_elements_by_link_text

方法六:通过超链接文本(模糊匹配)

# =====通过 超链接的文本查找元素(支持模糊匹配)

atext = driver.find_element_by_partial_link_text("肺炎")

  • find_element_by_partial_link_text支持模糊匹配,包含文本则匹配成功
  • 若需要返回全部匹配到的元素,也需要用find_elements_by_partial_link_text

方法七:通过xpath(万能,重点)

1 #通过xpath
2 lis = driver.find_element_by_xpath('//ul[@class="timeline timeline-sm"]/li/a[@href="http://t.zoukankan.com/zentao/tutorial-index--createAccount.html"]')

方法八:通过CSS选择器(万能,重点)

1 #通过css
2 lis = driver.find_element_by_css_selector('a[href="http://t.zoukankan.com/zentao/tutorial-index--createAccount.html"]')
3 print(lis.text)

其中Xpath,CSS包含的知识点很多,后续再讲

免责声明:文章转载自《selenium(1)-详细解读元素定位的八种方式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇腾讯位置服务数据可视化之轨迹图使用TRY CATCH进行SQL Server异常处理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Selenium自动化之鼠标双击操作

鼠标双击操作 from selenium.webdriver import ActionChains action_chains = ActionChains(self.driver) action_chains.double_click(inputBox).perform() import unittest import time from seleni...

Python Selenium Webdriver常用方法总结

Python Selenium Webdriver常用方法总结 常用方法函数 加载浏览器驱动: webdriver.Firefox() 打开页面:get() 关闭浏览器:quit() 最大化窗口: maximize_window() 设置窗口参数:set_window_size(600,800) 后退到前一页: back() 前进到后一页: forwar...

selenium定位多个嵌套iframe

一. driver.switch_to.frame(id):可以通过id切换到iframe之前学习了selenium切换到iframe的方法,代码如下 from selenium import webdriver driver = webdriver.Chrome() driver.switch_to.frame(0)...

selenium 难定位元素,时间插件,下拉框定位,string

1.元素定位 ID定位元素: findElement(By.id(“”)); 通过元素的名称定位元素: findElement(By.name(“”)); 通过元素的html中的位置定位元素: findElement(By.xpath(“”)); 通过元素的标签名称定位元素: findElement(By.tagName(“”)); 通过元素的链接名称...

Java Selenium

一篇概括了常用的元素定位方法,但是找到元素还是不够的,模拟鼠标的操作,完成各个功能点的自动操作才是关键。 下面是常见的页面元素操作会涉及到的方法,不是很全,比较复杂的后面单独拿出来做案例。 一, 输入框 ,按钮 登录到京东,找到主页的搜索框,这就是经典的输入框,然后点击搜索按钮,完成搜索的动作。 public static void Seach...

Selenium WebDriver问题Internet Explorer保护模式设置问题

在用WebDriver中打开Internet Explorer访问百度的是,报下面错误: org.openqa.selenium.remote.SessionNotFoundException: Unexpected error launching Internet Explorer. Protected Mode settings are not the...