selenium元素定位

一、介绍

  概念:是一个用于Web应用程序测试的工具

  特点:1、开源软件:源代码开放可以根据需要来增加工具的某些功能

     2、跨平台:Linux、Windows、mac

     3、核心功能:就是可以在多个浏览器上进行自动化测试

     4、多语言:Java、Python、C#、Javascript、Ruby等

     5、成熟稳定:被多家公司广泛使用

     6、功能强大:能够实现类似商业工具的大部分功能,因为开源性,可以实现定制化功能

  PS:Python虚拟环境安装

二、元素定位

# 定位
# id : find_element_by_id
# name : find_element_by_name
# class_name : find_element_by _class_nametag_name
# tag_name:find_element_by_tag_name 标签的重复性很高
# 一般情况下,id都是唯一的,可以通过id去定位

# 查找元素(标签、标记、节点) 通过id 将“A”传输进去
driver.find_element(By.ID, "kw").send_keys("A")
driver.find_element(By.ID, "su").click()

遇到的问题:

1、问题描述:在使用find_element_by_id时,没有反应。

driver.find_element_by_id("kw").send_keys("A")

报错'WebDriver' object has no attribute 'find_element_by_id'

原因及解决方法:新版的Python已经不支持这个函数了,需要改成find_elements(by=By.CLASS_NAME, value=name)改成这种形式,这种方法要借助 By 来传入定位方式,需要先引入,主要是为了防止定位方式写错。

# 引入
from selenium.webdriver.common.by import By

# 例子
driver.find_element_by_id(By.ID, "kw").send_keys("A")

使用find_element()的好处是方法名不会写死,定位方式可以通过参数传递,在一些框架中使用时会更加灵活一些。

以下是定位方式与 By 中的属性对应清单:

# 仅限超链接(没有id、没有name、class_name一样,通过之前的方法很难定位到)
# 可以通过a标签之间的链接文本来定位
# link text
driver.find_element(By.LINK_TEXT, "hao123").click()
# partial linktext 当标签中的文本过长
driver.find_element(By.PARTIAL_LINK_TEXT, "hao").click()

注意:如果相同的规则对应多个标签,那么这些方法会返回第一个

遇到的问题:

2、问题描述:与问题1同理

原因与解决方法:问题1同理得

# 通过CSS选择器
driver.find_element(By.CSS_SELECTOR, "#kw").send_keys("A")

 更多:CSS选择器手册

# -xpath xml path 根据xml的路径进行定位
# xml x:可扩展的 m:标记 l:语言
# html h:超 t:文本 标记语言 (超出文本范畴)
#   只能运用有限的几种标签,所以html是不可扩展的
# XML和HTML一样是标签语言,通过标签的嵌套来表达信息。
# xml自然而然形成了父节点、子节点、后代节点、相先节点、同胞节点等关系。
# 而xpath就是用来在这些节点中找到所需要的.
driver.find_element(By.XPATH, "//*[@id='kw']").send_keys("A")
driver.find_element(By.XPATH, "//*[@id='su'']").click()

获取xml路径:

3.问题描述:

在Chrome浏览器安装xpath helper插件结果一直提示“程序包无效”

解决方法:

1、将crx结尾的扩展包的后缀名更改为rar格式的压缩包文件,直接确认。

2、将压缩包进行解压缩,然后将路径下的_metadata改为metadata

3、进入Chrome浏览器的加载扩展程序界面,点击“加载已解压的扩展程序”,进入解压后的文件夹就可以直接安装了。

 

打开和关闭xpath helper的快捷键都是:ctrl + shift + x

 

posted @ 2022-07-25 11:28  石元  阅读(1493)  评论(0编辑  收藏  举报