Selenium 之元素选择器

为什么要学元素选择器?

web自动化脚本如何操作浏览器呢?最重要的就是告诉浏览器,你要操作的元素是什么。

元素选择器就是起到这么一个作用,元素选择器在 Selenium 自动化测试中起着至关重要的作用。它们用于在网页中定位和操作元素,从而实现自动化测试的目的。通过元素选择器,你可以与网页中的各种元素进行交互,例如点击按钮、输入文本、选择下拉框、验证文本等。

Selenium ——八大元素选择器

Id选择器

通过元素的 id 属性来查找元素。id 属性通常是唯一的,因此这是最常用的选择器之一。

示列html页面
<!DOCTYPE html>
<html>
<head>
    <title>Example Page</title>
</head>
<body>
    <h1 id="header">Welcome to Selenium</h1>
    <button id="myButton">Click Me!</button>
</body>
</html>



# 通过 ID 查找标题元素并打印其文本内容,driver是WebDriver对象
driver.find_element(By.ID, "header")

如图可以发现想要选中Welcome to Selenium这句话,而h1标签恰好有id属性header,因此可以使用id选择器,driver.find_element(By.ID, "header")选中h1这个元素。

Name选择器

通过元素的 name属性来查找元素。用于表单元素,使用频率中等。

<!DOCTYPE html>
<html>
<head>
    <title>Example Page</title>
</head>
<body>
    <h1>Example Form</h1>
    <form>
        <label for="username">Username:</label>
        <input type="text" id="username" name="username"><br><br>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password"><br><br>
        <button type="submit" name="submit_button">Submit</button>
    </form>
</body>
</html>



# 通过 NAME 查找用户名输入框并输入文本
driver.find_element(By.NAME, "username")

如图可以发现想要选中name输入框,除了可以使用id选择器之外,使用 driver.find_element(By.NAME, "username") 查找 name 属性为 username 的输入框。

 CLASS_NAME选择器

通过元素的 CLASS_NAME属性来查找元素。适合查找特定类名的元素,使用频率中等。

<!DOCTYPE html>
<html>
<head>
    <title>Example Page</title>
</head>
<body>
    <h1 class="header">Welcome to CLASS_NAME</h1>
    <button class="btn">Click Me!</button>
</body>
</html>





# 通过 CLASS_NAME 查找
driver.find_element(By.CLASS_NAME, "header")

如图可以发现想要选中Welcome to CLASS_NAME这句话,而h1标签恰好有class属性header,因此可以使用CLASS_NAME选择器,driver.find_element(By.CLASS_NAME, "header")选中h1这个元素。

TAG_NAME选择器

通过元素的 CLASS_NAME属性来查找元素。适用于特定标签的所有元素,使用频率较低。

#通过 HTML 标签名称来查找元素。例如,查找所有的 <div> 元素。

driver.find_element(By.TAG_NAME, "header")

LINK_TEXT选择器

#通过链接文本来查找 <a> 标签元素。适用于唯一的链接文本。

driver.find_element(By.LINK_TEXT, "link_text")

PARTIAL_LINK_TEXT选择器

#通过部分链接文本来查找 <a> 标签元素。适用于链接文本较长或只记得部分文本的情况。

driver.find_element(By.PARTIAL_LINK_TEXT, "partial_link_text")

CSS Selector选择器

CSS是一种用于描述 HTML 或 XML 文档样式的语言。常 用于控制网页的外观和布局,使得开发者可以将内容与样式分离,从而更好地维护和管理网页。市面上几乎所有的网页都使用了Css。而CSS Selector选择器就是用Css来对元素进行选择,基于这样的背景,CSS Selector 语法天生就是浏览器用来选择元素的。

#CSS_SELECTOR基本语法

find_element(By.CSS_SELECTOR, 'CSS_SELECTOR参数')
根据 tag名、id、class 选择元素

CSS_SELECTOR中也是可以根据id、tag,class来进行选择

根据 tag名 选择元素的 CSS Selector 语法非常简单,在Css参数位置直接写上tag名即可

#要选择 所有的tag名为div的元素
#CSS_SELECTOR选择器
driver.find_element(By.CSS_SELECTOR, 'div')
#等同于Tag_name选择器
driver.find_element(By.TAG_NAME, 'div')

根据id属性选择元素的语法是在id值前面加上一个井号:#id值

#CSS_SELECTOR参数=#id

driver.find_element(By.TAG_NAME, '#id值')

根据class属性选择元素的语法是在class值前面加上一个点号:.class

#CSS_SELECTOR参数=.class值

driver.find_element(By.TAG_NAME, '.class值')
根据属性值选择元素

想选中图中python自动化这段标题,就可以通过data-title这个属性进行选中。



driver.find_element(By.TAG_NAME, '[data-title="python 做 API接口测试 和 自动化  -  1周入门"]')

当然也可以在属性值前面加上标签的限制,使元素选择的更精准



driver.find_element(By.TAG_NAME, 'h1[data-title="python 做 API接口测试 和 自动化  -  1周入门"]')

多个属性值同时使用



driver.find_element(By.TAG_NAME, 'h1[data-title='python 做 API接口测试 和 自动化  -  1周入门'][class='video-title special-text-indent']')
CSS_SELECTOR联合使用

比如, 我们要选择 网页 html 中的元素 <span class="target">测试1</span>

<div id="parent">
    <div class="child1">
        <span class="target">测试1</span>
    </div>
    <div class="child2">
        <span class="target">测试2</span>
    </div>
    <div class="child3">
        <span class="target">测试3</span>
    </div>
</div>

CSS selector 表达式 可以这样写:

#选择parent下的测试1

.child1>.target    #子元素选择

#还可以这样写

.child1>span        #子元素选择

#也可以这样写

.child1 span        #span既然是子元素,当然也是后代元素

CSS 选择器可以多个class联用,也可以和其他联用。

按照次序选择
父元素的第几个子元素
#使用nth-child

:nth-child(1)    #父元素下的第一个子元素

span:nth-child(1)   #父元素的第一个子元素,如果是span就选择
#举例

div>span:nth-child(1)     #div下的第一个子元素,如果是span就选
父元素的倒数第几个子元素
#使用 nth-last-child

:nth-last-child(1)    #父元素下的倒数第一个子元素


span:nth-last-child(1)    #父元素下的倒数第一个子元素吗,如果是span就选


div:span:nth-last-child(1)     #div下的倒数第一个子元素,如果是span就选
父元素的第几个某类型的子元素
span:nth-of-type(1)    #父元素下类型为span的第一个元素

#举例

div>span:nth-of-type(1)      #div下类型为span的第一个元素
父元素的倒数第几个某类型的子节点
span:nth-last-of-type(1)    #父元素下类型为span的倒数第一个元素


#举例

div span:nth-last-of-type(1)    #div下类型为span的倒数第一个元素
奇偶数子元素选择
#偶数

:nth-child(even) 

#奇数

:nth-child(odd) 

#也可以和nth-of-type一起使用

nth-of-type(even)

nth-of-type(odd)
兄弟元素的选择

前面使用了父子元素,和后代元素,那么能不能用兄弟元素选择呢?当然可以!

<div id="parent">
    <h3>你学习吗</h3>
    <span>我不学习</span>

    <div>信你个鬼</div>
</div>

#相邻兄弟元素

h3+span

#不相邻子元素

h3~div

Xpath选择器

前面介绍了css选择器,大家是不是觉得非常的强大灵活呢,还有另一种选择器也不遑多让,那就是接下来要介绍的Xpath选择器.

在Xpath中/代表根节点

基本选择器

绝对路径: /html/body/div

相对路径: //div

属性选择器

通过属性选择: //tag[@attribute='value']

部分匹配属性值: //tag[contains(@attribute, 'value')]

通过多个属性值选择: //tag[@attribute1='value1' and @attribute2='value2']

文本选择器

精确匹配文本内容: //tag[text()='text']

部分匹配文本内容: //tag[contains(text(), 'text')]

位置选择器

选择第一个子元素: (//tag)[1]

选择最后一个子元素: (//tag)[last()]

选择特定位置的子元素: (//tag)[position()]

轴选择器(父子兄弟)

选择父节点: //tag/parent::parentTag

选择子节点: //tag/child::childTag

选择兄弟节点: //tag/following-sibling::siblingTag

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Selenium使用CSS选择来定位和操作网页元素。CSS选择是一种通过CSS标记、类和属性等特征来选择元素的方法。通过使用CSS选择,可以更加灵活地定位元素,提高测试脚本的稳定性和可维护性。 在Selenium中,可以使用`By.cssSelector`方法来使用CSS选择。该方法需要传入一个CSS选择作为参数,来指定要定位的元素。例如,在Java中使用Selenium的CSS选择,可以像下面这样写: ```java import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class SeleniumCSSLocators { public static void main(String[] args) { WebDriver driver = new ChromeDriver(); driver.get("https://www.example.com"); // 使用CSS选择定位元素并进行操作 driver.findElement(By.cssSelector("input[name=username")).sendKeys("username"); driver.findElement(By.cssSelector("input[name=password")).sendKeys("password"); driver.findElement(By.cssSelector("button[type=submit")).click(); } } ``` 在上面的例子中,使用了三个不同的CSS选择来定位用户名输入框、密码输入框和提交按钮,并进行相应的操作。通过在`By.cssSelector`方法中传入相应的CSS选择字符串,就可以定位到对应的元素。 引用提供了关于Selenium CSS选择的问题定义,引用提供了相关来源,引用提供了一个示例代码来展示如何在Selenium中使用CSS选择定位元素。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SeleniumCSS选择](https://blog.csdn.net/cunchi4221/article/details/107472314)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值