WEB自动化-selenium-定位方式(总结的一些疑难杂症)

定位元素的时候可以修改JS样式来确定定位的元素是否正确

# 通过selenium修改JS属性, 用来确定我定位的元素是什么?
driver.execute_script(
    "arguments[0].setAttribute('style',arguments[1]);",
    el,
    "border: 2px solid green;"  # 边框,green绿色
)

首先,driver.find_element(),,括号里一般跟的是(By.ID,"ID的值"),如element = (By.NAME, "btnK") driver.find_element(By.NAME"btnK"),运行成功

如果我们先定义变量 locator = (By.NAME"btnK"),再写driver.find_element

element = (By.NAME, "btnK")

driver.find_element(element)

这样运行会报错,原因:第一个版本发送两个参数,第二个版本发送一个参数(字符串)。那么需要修改成如下,才能执行成功

使用*操作符对参数进行“解压缩”:发送一个参数(一个元组)

args = (By.NAME, "btnK")
driver.find_element(*args)

 

 一、CSS 定位方式,这里有个博主写的很详细了,

Selenium之元素定位-css - linux超 - 博客园 (cnblogs.com)

另外发现实际在用class定位的时候,有以下需要注意的:

1、如class的值有空格的时候定位不到,此时需要用.替换空格,如

    locator = ("css selector", ".s_input icon_code")  # 定位验证码输入框(这里有空格,定位不到元素)
    locator = ("css selector", ".s_input.icon_code")  # 定位验证码输入框--这里需要把空格替换成.

 2、后代选取的时候 ,不限于子代,孙代,标签后面用空格,,如果只是子代,用>

 二、XPATH

1、标签的text()包含文本,使用contains(text(),"值")定位不到

  XPATH用文本定位方式,有的时候文本包含空格的时候,是定位不到的,如

 这个时候用符号“.”替换text()就可以定位到

//td[@style="position: relative" and contains(., "野蛮女将军")]

因为里面存在的一些空格,可能导致模糊匹配不成功,用normalize-space()方法去掉空格,再去匹配

   //td[@style="position: relative" and contains(normalize-space(), "野蛮女将军")]

 

2、用多个标签下的元素来定位同一个元素

 

 这里,有多个野蛮女将军,我想定位“野蛮女将军12”对应的章节管理,这里的text()=野蛮女将军12 和 章节管理在不同的元素和标签层级中却在同一个class=book_list下。那么这种的就需要先定位一个元素,在定位一个元素。需要用到的返回上级的xpath方法

/.. 定位  返回上级节点  和parent 效果一样

//tbody/tr/td[@style="position: relative" and text()="                                野蛮女将军12"]/../td/a[text()="章节管理  "]
//tbody/tr/td[@style="position: relative" and text()="                                野蛮女将军12"]/parent::*/td/a[text()="章节管理  "]

 

posted @ 2023-06-27 17:48  琉璃星眸  阅读(19)  评论(0编辑  收藏  举报