113.md 5.8 KB
Newer Older
W
wizardforcel 已提交
1
# 9 升 WebDriver – 定位元素:第 3a 部分(由 cssSelector 提供)
W
init  
wizardforcel 已提交
2 3 4

> 原文: [https://javabeginnerstutorial.com/selenium/9l-webdriver-locating-elements-3a/](https://javabeginnerstutorial.com/selenium/9l-webdriver-locating-elements-3a/)

W
wizardforcel 已提交
5
Hiya 测试人员! 让我们直接进入 cssSelector 定位策略。
W
init  
wizardforcel 已提交
6

W
wizardforcel 已提交
7
如果我们没有选择使用 ID,类或名称来查找元素的方法,该怎么办? 袖子上有东西吗? 好吧,我有一个 **cssSelectors** 。 这是一种先进而有效的策略。
W
init  
wizardforcel 已提交
8

W
wizardforcel 已提交
9
##### *准备点亮*
W
init  
wizardforcel 已提交
10

W
wizardforcel 已提交
11 12
*   **CSS** (级联样式表)。 根据 Wikipedia 的说法,“ CSS 是一种样式表语言,用于描述以标记语言编写的文档的表示形式”。 它通过添加样式来更改 HTML 元素的外观,并定义应如何在网页上显示它们。
*   **选择器**是使用 HTML 标记,属性及其值构造的模式。 然后将它们用于匹配所需的 Web 元素。
W
init  
wizardforcel 已提交
13

W
wizardforcel 已提交
14
##### *使用 cssSelector 定位器优于 XPath 定位器的优点*
W
init  
wizardforcel 已提交
15

W
wizardforcel 已提交
16
*   速度更快,尤其是在 Internet Explorer 中
W
init  
wizardforcel 已提交
17 18 19 20
*   更简单
*   更具可读性
*   首选使用方式

W
wizardforcel 已提交
21
## *通过 cssSelector 定位*
W
init  
wizardforcel 已提交
22

W
wizardforcel 已提交
23
有多种使用 cssSelector 定位器的方式,这取决于可用的标签,属性,关键字等。要列出它们,
W
init  
wizardforcel 已提交
24

W
wizardforcel 已提交
25
1.  使用标签和 ID 属性
W
init  
wizardforcel 已提交
26 27 28 29 30 31 32 33
2.  使用标签和类属性
3.  使用标签和名称属性
4.  使用标签和多个属性
5.  定位子元素
6.  按子字符串匹配

在这篇文章中,我们将介绍前四种方法。 是时候一步一步地完成这些工作了。

W
wizardforcel 已提交
34
## 1.使用标签和 ID 属性
W
init  
wizardforcel 已提交
35

W
wizardforcel 已提交
36
借助 cssSelector 定位策略,可以使用元素的 HTML 标记及其 ID 属性及其值来对其进行访问。
W
init  
wizardforcel 已提交
37 38 39

有两种方法可以实现此目的:

W
wizardforcel 已提交
40
***语法*** ** *driver.findElement(By.cssSelector(“ tag_name# value_of_id”)));*
W
init  
wizardforcel 已提交
41 42 43

*driver.findElement(By.cssSelector(“ tag_name [id ='value_of_id']”)));;*

W
wizardforcel 已提交
44
***说明*** **使用匹配的 CSS 选择器定位元素。 在第一种方法中,**# **符号代表“ id”属性。
W
init  
wizardforcel 已提交
45

W
wizardforcel 已提交
46
***示例*** **让我们在 Gmail 帐户登录页面上找到“电子邮件”文本框。
W
init  
wizardforcel 已提交
47

W
wizardforcel 已提交
48
右键单击“输入电子邮件”文本框,然后选择检查元素以获取相应的 HTML 代码。 我们可以看到“输入”标签的“ id”属性为“电子邮件”。
W
init  
wizardforcel 已提交
49 50 51 52 53 54 55

*代码:*

```java
driver.findElement(By.cssSelector("input#Email"));
```

W
wizardforcel 已提交
56
(或者)
W
init  
wizardforcel 已提交
57 58 59 60 61 62 63 64 65

```java
driver.findElement(By.cssSelector("input[id='Email']"));
```

![By cssSelector](img/ef82f235798b42892dedae6b0b8a9842.png)

## 2.使用标签和类属性

W
wizardforcel 已提交
66
元素的 HTML 标签及其类属性及其值可用于访问它。 也有两种方法可以实现此目的,
W
init  
wizardforcel 已提交
67 68 69 70 71

***语法**:driver.findElement(By.cssSelector(“ tag_name.value_of_class”)));*

*driver.findElement(By.cssSelector(“ tag_name [class ='value_of_class']”)));;*

W
wizardforcel 已提交
72
***说明*** **使用匹配的 CSS 选择器定位元素。 在第一种方法中,“。”符号代表“类别”属性。
W
init  
wizardforcel 已提交
73

W
wizardforcel 已提交
74
***示例*** **让我们在使用类属性的 Gmail 帐户“注册”页面上找到“手机”文本框。
W
init  
wizardforcel 已提交
75

W
wizardforcel 已提交
76
右键点击“手机”文本框,然后选择检查元素,以获取相应的 HTML 代码,如下所示,
W
init  
wizardforcel 已提交
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

```java
<input   tabindex="0" name="RecoveryPhoneNumber" 
id="RecoveryPhoneNumber" value="" 
class="i18n_phone_number_input-inner_input" type="tel">
```

我们可以看到“ **输入**”标签具有“ **类**”属性,名称为“ **i18n_phone_number_input-inner_input** ”。

*Code:*

```java
driver.findElement(By.cssSelector("input.i18n_phone_number_input-inner_input "));
```

(or)

```java
driver.findElement(By.cssSelector("input[class='i18n_phone_number_input-inner_input']"));
```

## 3.使用标签和名称属性

W
wizardforcel 已提交
100
元素的 HTML 标记及其名称属性及其值可用于访问它。
W
init  
wizardforcel 已提交
101 102 103

***语法*** ** *driver.findElement(By.cssSelector(“ tag_name [name =’value_of_name’]”)));*

W
wizardforcel 已提交
104
***说明*** **使用匹配的 CSS 选择器定位元素。
W
init  
wizardforcel 已提交
105

W
wizardforcel 已提交
106
***示例*** **让我们在 Gmail 帐户注册页面上找到名字文本框。
W
init  
wizardforcel 已提交
107

W
wizardforcel 已提交
108
右键点击“名字”文本框,然后选择检查元素,以获取相应的 HTML 代码,如下所示,
W
init  
wizardforcel 已提交
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

```java
<input value="" name="FirstName" 
id="FirstName" spellcheck="false" class="   
form-error" aria-invalid="true" type="text">
```

我们可以看到,“ input”标签的“ **name** ”属性为“ **FirstName** ”。

*Code:*

```java
driver.findElement(By.cssSelector("input[name='FirstName']"));
```

## 4.使用标签和多个属性

W
wizardforcel 已提交
126
元素的 HTML 标签和一个以上的属性及其值可用于访问它。
W
init  
wizardforcel 已提交
127 128 129

***语法*** ** *driver.findElement(By.cssSelector(“ tag_name [attribute1 ='value_of_attribute1'] [attribute2 ='value_of_attribute2']”))) ;*

W
wizardforcel 已提交
130
***说明*** **使用匹配的 CSS 选择器定位元素。 以这种方式可以提到许多属性。
W
init  
wizardforcel 已提交
131

W
wizardforcel 已提交
132
***示例*** **让我们使用 ID,类型和名称属性在 Gmail 帐户注册页面上找到“创建密码”文本框。
W
init  
wizardforcel 已提交
133

W
wizardforcel 已提交
134
右键点击“创建密码”文本框,然后选择检查元素以获取相应的 HTML 代码,如下所示,
W
init  
wizardforcel 已提交
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153

```java
<input name="Passwd" id="Passwd" type="password">
```

我们可以看到,“输入”标签具有“ **名称**”和“ **id** ”属性,它们的属性分别为“ **Passwd** ”和“ **类型**” '属性作为'**密码**'。

*Code:*

```java
driver.findElement(By.cssSelector("input#Passwd[name='Passwd']"));
```

(or)

```java
driver.findElement(By.cssSelector("input[type='Password'][name='Passwd'"));
```

W
wizardforcel 已提交
154
如果使用 id,则可以用“# ”符号表示,而可以用“。”符号表示类。
W
init  
wizardforcel 已提交
155 156 157 158 159 160 161

*感觉都糟透了吗?* *需要一些时间练习吗?*

我知道,您急需先休息一下。 你的愿望就是我的命令! 现在,时间全在您了。

我们的下一篇文章很快见。 祝你有美好的一天!