提交 5ae7d90a 编写于 作者: W wizardforcel

2020-06-25 15:35:23

上级 5db72dc8
......@@ -22,13 +22,13 @@ driver.findElement(By.LocatorStrategyType ("Locator_Value"));
#### 可用的定位器类型包括:
* ID
* Name
* 名称
* 标签名
* 类名称
* LinkText
* partialLinkText
* cssSelector
* 路径
* 链接文本
* `partialLinkText`
* `cssSelector`
* XPath
可以随时通过编程方式掌握页面上所需的元素,但要实现此目的,我们的创作方可能不得不偷看一下。 原因是,我们并不总是可以控制页面上的 HTML。 这就是为什么我们有这么多的定位器类型,而且绝对没有理由惊慌!
......
......@@ -38,7 +38,7 @@ driver.findElement(By.className("i18n_phone_number_input-inner_input"));
**示例**:让我们找到在 gmail 帐户创建页面底部提供的超链接“了解更多信息”。
*Code:*
*代码:*
```java
driver.findElement(By.linkText("Learn more"));
......@@ -56,7 +56,7 @@ driver.findElement(By.linkText("Learn more"));
**示例**:让我们在 Gmail 帐户创建页面的“选择用户名”文本框下方找到超链接“我更喜欢使用我当前的电子邮件地址” - 文本:**我更喜欢**
*Code:*
*代码:*
```java
driver.findElement(By.partialLinkText("I prefer to"));
......
......@@ -87,7 +87,7 @@ class="i18n_phone_number_input-inner_input" type="tel">
我们可以看到“`input`”标签具有“`class`”属性,名称为“`i18n_phone_number_input-inner_input`”。
*Code:*
*代码:*
```java
driver.findElement(By.cssSelector("input.i18n_phone_number_input-inner_input "));
......@@ -119,7 +119,7 @@ form-error" aria-invalid="true" type="text">
我们可以看到,“`input`”标签的“`name`”属性为“`FirstName`”。
*Code:*
*代码:*
```java
driver.findElement(By.cssSelector("input[name='FirstName']"));
......@@ -143,7 +143,7 @@ driver.findElement(By.cssSelector("input[name='FirstName']"));
我们可以看到,“`input`”标签具有“`name`”和“`id`”属性,它们的值均为“`Passwd`”,“`type`”属性为`password`
*Code:*
*代码:*
```java
driver.findElement(By.cssSelector("input#Passwd[name='Passwd']"));
......
......@@ -69,7 +69,7 @@ driver.findElement(By.cssSelector("label#recovery-email-label input[name='Recove
要标识子元素“狗”,
*Code:*
*代码:*
```java
driver.findElement(By.cssSelector("ul#pets li:nth-of-type(2)"));
......@@ -95,7 +95,7 @@ driver.findElement(By.cssSelector("ul#pets li:nth-of-type(2)"));
我们可以看到`input`标签具有一个名为“`LastName`”的“`id`”属性。 要找到此元素,我们可以指定查找以“`Last`”开头的“`id`”属性值。
*Code:*
*代码:*
```java
driver.findElement(By.cssSelector("input[id^='Last']"));
......@@ -117,7 +117,7 @@ Considering the below code,
我们可以看到“`input`”标签的“`name`”属性为“`PasswdAgain`”。 要找到此元素,我们可以指定查找以“`Again`”结尾的“`name`”属性值。
*Code:*
*代码:*
```java
driver.findElement(By.cssSelector("input[name$='Again']"));
......@@ -139,7 +139,7 @@ Considering the below code,
我们可以看到“`input`”标签的“`name`”属性为“`PasswdAgain`”。 要找到此元素,我们可以指定查找包含“`wdAg`”的“`name`”属性值。
*Code:*
*代码:*
```java
driver.findElement(By.cssSelector("input[name*='wdAg']"));
......
......@@ -137,7 +137,7 @@ driver.findElement(By.xpath("//input[@type='password'][@id='PasswdAgain']"));
右键单击按钮并检查元素以获取相应的 HTML 代码,如下所示,
*Code:*
*代码:*
```java
driver.findElement(By.xpath("//div[contains(@class,'button')]/input"));
......@@ -151,7 +151,7 @@ driver.findElement(By.xpath("//div[contains(@class,'button')]/input"));
**示例**:让我们在 Gmail 帐户注册页面上找到所有类值为“`goog-inline-block`”的元素。
*Code:*
*代码:*
```java
driver.findElements(By.xpath("//*[contains(@class,'goog-inline-block')]"));
......
......@@ -69,7 +69,7 @@ aria-label="New password" type="password">
因此,第二个元素必须位于我们的案例中。
*Code:*
*代码:*
```java
driver.findElement(By.xpath("(//input[starts-with(@type,'pass')])[2]"));
......@@ -115,7 +115,7 @@ XPath 轴定义在当前节点浏览 DOM 的树形结构时要考虑的相对于
</a>
```
*Code:*
*代码:*
```java
driver.findElement(By.xpath("//i[@class='fb_logo']/parent::a"));
......@@ -133,7 +133,7 @@ Upon inspecting the element,
Birthday
*Code:*
*代码:*
```java
driver.findElement(By.xpath("//select[@id='month']/ancestor::div[@class='_5k_5']/preceding-sibling::div"));
......@@ -155,7 +155,7 @@ Upon inspecting the element,
<label class="uiButton uiButtonConfirm" for="u_0_q" id="loginbutton"></label>
```
*Code:*
*代码:*
```java
driver.findElement(By.xpath("//label[@id='loginbutton']/child::input"));
......@@ -177,7 +177,7 @@ First name
<input id=u_0_1 class=”inputtext _58mg _5dba _2ph- data-type=text name=firstname aria-required=1 placeholder=”” aria-label=First name type=text> </div>
```
*Code:*
*代码:*
```java
driver.findElement(By.xpath("//div[contains(@class,'uiStickyPlaceholderInput')]/descendant::input"));
......@@ -202,7 +202,7 @@ Upon inspecting the element,
</td>
```
*Code:*
*代码:*
```java
driver.findElement(By.xpath("//td[@class='_51m- hLeft plm']/following-sibling::td/child::a"));
......@@ -227,7 +227,7 @@ Upon inspecting the element,
</span>
```
*Code:*
*代码:*
```java
driver.findElement(By.xpath("//label[@class='_58mt']/preceding-sibling::input"));
......
......@@ -56,7 +56,7 @@ driver.findElement(By.cssSelector("input[value='Magazines']"));
<input id="tricycle-checkbox" type="checkbox" name="vehicle2" value="Tricycle" disabled>&nbsp;Tricycle
```
*Code:*
*代码:*
```java
driver.findElement(By.name("vehicle2")).isDisplayed();
......@@ -74,7 +74,7 @@ Respective HTML code for reference,
<input id="tricycle-checkbox" type="checkbox" name="vehicle2" value="Tricycle" disabled>&nbsp;Tricycle
```
*Code:*
*代码:*
```java
WebElement tricycleCheckbox = driver.findElement(By.name("vehicle2"));
......@@ -100,7 +100,7 @@ Respective HTML code for reference,
<input id="magazines-radio-btn" type="radio" name="books" value="Magazines"> &nbsp;Magazines
```
*Code:*
*代码:*
```java
// Locate 'Magazines' radio button using cssSelector
......@@ -128,7 +128,7 @@ Respective HTML code for reference,
<input id="sedan-checkbox" type="checkbox" name="vehicle5" value="Sedan">&nbsp;Sedan
```
*Code:*
*代码:*
```java
// Locate 'Sedan' checkbox using xPath: contains() and text()
......
......@@ -127,7 +127,7 @@ languages.deselectByVisibleText("JavaScript");
`value`属性的值“`RC`”将作为参数传递给`selectByValue`方法。
*Code:*
*代码:*
```java
multiSelect.selectByValue("RC");
......@@ -145,7 +145,7 @@ multiSelect.selectByValue("RC");
基于 HTML 代码,Selenium IDE 的索引为 0,Selenium WebDriver 的索引为 1,Selenium RC 的索引为 2。
*Code:*
*代码:*
```java
multiSelect.deselectByIndex(2);
......@@ -163,7 +163,7 @@ multiSelect.deselectByIndex(2);
**示例**:让我们取消选择在 Selenium 工具套件多重选择框中选择的所有选项。
*Code:*
*代码:*
```java
multiSelect.deselectAll();
......@@ -181,7 +181,7 @@ multiSelect.deselectAll();
**语法**`selectObject.getOptions()`
*Code:*
*代码:*
```java
List<WebElement> allOptions = multiSelect.getOptions();
......@@ -201,7 +201,7 @@ List<WebElement> allOptions = multiSelect.getOptions();
**语法**`selectObject.getAllSelectedOptions()`
*Code:*
*代码:*
```java
List<WebElement> allSelectedOptions = multiSelect.getAllSelectedOptions();
......
......@@ -52,7 +52,7 @@ System.out.println("Inner table first row text = " + innerRow1.getText());
让我们找到嵌套表的第二行,并将其内容打印到控制台。 相对路径是 XPath 的一部分,用于定位嵌套表的所需单元格。
*Code:*
*代码:*
```java
// Locate 'Inner Row 2' using xPath
......
......@@ -24,7 +24,7 @@ WebElement BooksTable = driver.findElement(By.id("BooksAuthorsTable"));
让我们使用绝对 XPath 查找总行数。 请注意,XPath 以标签名称“`tr`”结尾。 `size()`方法给出使用 XPath 由`findElements()`返回的元素数。
*Code:*
*代码:*
```java
int rowNum = driver.findElements(By.xpath("/html/body/form/div[5]/div/div/table/tbody/tr")).size();
......@@ -32,7 +32,7 @@ int rowNum = driver.findElements(By.xpath("/html/body/form/div[5]/div/div/table/
让我们稍微切换一下齿轮,并使用相对 XPath 查找总列数。
*Code:*
*代码:*
```java
int colNum = driver.findElements(By.xpath("//table[@id='BooksAuthorsTable']/tbody/tr[1]/th")).size();
......@@ -46,7 +46,7 @@ int colNum = driver.findElements(By.xpath("//table[@id='BooksAuthorsTable']/tbod
如果表的行和列号固定为,那么遍历每个表元素将变得非常容易。 可以使用两个`for()`循环,一个用于行,另一个用于访问列值。
*Code:*
*代码:*
```java
for(int i=2; i<=6; i++){
......
......@@ -43,7 +43,7 @@ Set<String> winHandles = driver.getWindowHandles();
7. 通过两个句柄循环
8. 切换到带有句柄参考的新窗口
9. 获取标题并将其打印到控制台
10. 关闭新视窗
10. 关闭新窗口
11. 将控件切换回父窗口,然后将 URL 打印到控制台
12. 验证 Eclipse IDE 控制台输出屏幕和 JUnit 窗格是否成功
......
......@@ -25,7 +25,7 @@ driver.manage().window().maximize();
8. 切换到带有句柄参考的新窗口
9. 获取标题并将其打印到控制台
10. 将小窗口最大化到全屏尺寸
11. 关闭新视窗
11. 关闭新窗口
12. 将控件切换回父窗口,然后将 URL 打印到控制台
13. 验证 Eclipse IDE 控制台输出屏幕和 JUnit 窗格是否成功
......
......@@ -4,13 +4,13 @@
在本文中,您将学习非访问修饰符。 以下是可用的 Java 非访问修饰符。
* 最后
* 抽象
* 静态的
* 严格
* 本机
* 已同步
* 短暂的
* `final`
* `abstract`
* `static`
* `strictfp`
* `native`
* `syncronized`
* `transient`
## `final`非访问修饰符
......
......@@ -25,7 +25,7 @@ Vue 带有一些内置指令。 请注意,我们可以编写自己的自定义
## 场景:
* 显示标题
* 显示标题
* 显示带有问候消息的段落,例如“嗨!”
### `Index.html`
......
......@@ -43,7 +43,7 @@ var app = new Vue({
如果我们想在`v-for`语法中使用多个参数,则必须使用括号。 **顺序**在这里很重要。
* **第一个自变量**将始终是**值**
* **第一个自变量**将始终是**值**
* **第二个自变量**将是**键**
参数名称可以是我们选择的任何名称。 为了简单和易于理解,让我们使用`value``key`作为参数名称。
......
......@@ -6,9 +6,9 @@
## Java 语句的类型
* 表达声明
* 表达式语句
* 控制语句
* 分配声明
* 赋值语句
在本节中,我们将讨论控制语句。
......@@ -16,8 +16,8 @@
## 控制语句
* 有条件的执行
* 循环播放
* 条件执行
* 循环控制
* 流控制语句
* * *
......
......@@ -4,10 +4,10 @@
Python 适用于各种平台,包括 Linux,Windows 和 Mac OS。 因此,在这里我们将了解如何设置 python 环境。 对于本地环境设置,请打开终端窗口,然后在其中键入“python”以知道它是否已安装(如果已安装,则说明是哪个版本)。
* Unix / Linux
* 视窗
* 苹果机
*
* Unix/Linux
* Windows
* MacOS
* 其它
python 的安装程序也可以从官方网站安装以获得最新版本。 链接在这里
......@@ -30,7 +30,7 @@ python 的安装程序也可以从官方网站安装以获得最新版本。 链
* 下载后,解压缩文件。
* 如果需要,请编辑模块/设置文件。
* 运行`./configure`脚本
* 使
* 配置
* 进行安装
此命令将 python 安装在标准位置`/usr/local/bin``/usr/local/lib/pythonAA`中的库中,其中`AA`是 python 的版本。
......
......@@ -19,14 +19,14 @@ class InnerClass {
## 内部类的类型
* 静态
* 本地方法
* 静态
* 方法局部
* 匿名
* 除了这些正常的内部阶级之外
* 除了这些正常的内部之外
## 普通内部类
本地方法,静态方法或匿名方法的内部类是普通内部类。
方法局部,静态方法或匿名方法的内部类是普通内部类。
```java
//outer class
......
......@@ -166,7 +166,7 @@ public class MyTryWithResources {
* `Foo`类的`close()`将消息“正在关闭`Foo`”打印到控制台,并抛出一个异常,该异常在`try`块抛出的异常暴露时被抑制。
* 仅当`try`块和`try-with-resources`语句(`close()`方法)都抛出异常时,`try-with-resources`语句对这种异常的抑制才发生。
* `Bar`类的`close()`运行,并将消息“`Closing Bar`”显示在控制台上。
* 然后,终于执行了块
* 然后,`finally`块执行
3. 如果您还想检索抑制的异常怎么办? 不要担心。 在 Java SE 7 和更高版本中,可以使用`getSuppressed()`方法检索它们。
4. 尽管关闭特定资源时会引发异常,但是所有打开的资源都将被关闭,而与引发的异常无关。 在我们的示例中,尽管关闭`Foo`资源时发生异常,但`Bar`资源也成功关闭。
......
......@@ -11,9 +11,9 @@
#### 重载方法
* 必须更改参数列表
* 可以更改退货类型
* 可以更改返回类型
* 可以更改访问修饰符(更广泛)
* 可以声明一个新的或更广泛的检查异常
* 可以声明一个新的或更广泛的受检异常
###### 方法可以在类或子类中重载。
......
......@@ -34,7 +34,7 @@ System.out.println("Show method of Sub class");
* 覆盖方法*不能*具有比被覆盖的方法更多的*限制性访问修饰符*,但可以更少。
* 参数列表必须与覆盖的方法完全匹配,如果不匹配,则很可能是您正在重载该方法。
* 返回类型必须与在超类中的覆盖方法中声明的返回类型相同或为该子类型的子类型。
* 覆盖方法*可以*抛出任何*非受检异常(运行时)*,但是它可以抛出比被覆盖方法声明的范围更广或更新的检查异常,但不能抛出更少或狭窄的异常检查。
* 覆盖方法*可以*抛出任何*非受检异常(运行时)*,但是它可以抛出比被覆盖方法声明的范围更广或更新的受检异常,但不能抛出更少或狭窄的异常检查。
* *不能覆盖最终的方法*
* *静态*方法*无法覆盖*。 静态方法看起来可以覆盖,但它是隐藏的。
* 如果*方法无法继承,则无法覆盖*
......
......@@ -21,8 +21,8 @@
* 类(未嵌套)
* 构造器
* 介面
* 方法本地内部类(与嵌套类之间的区别)
* 接口
* 方法局部内部类(与嵌套类之间的区别)
* 内部类方法
* 实例变量
* 局部变量
......
......@@ -112,9 +112,8 @@ List l = new ArrayList<E>();
* 可增长数组
* 快速迭代
* 快速随机存取
* 按索引排序的集合
* 未分类
* 快速随机访问
* 按索引排序
* * *
......@@ -145,11 +144,13 @@ List l = new ArrayList<E>();
**属性**
* 未分类
* 无序
* 使用对象的哈希码
* 没有重复的对象
* `LinkedHashMap`
### `LinkedHashMap`
* 有序(插入)
* 使用对象的哈希码
* 没有重复的对象
......
......@@ -38,7 +38,7 @@ JDK = JRE + 开发 Java 应用所需的库。
为了理解 Java 的可移植性,您需要从头到尾了解 Java 代码会发生什么。
* Java 源代码(由开发人员编写)(机器中性)
* 编译代码/字节码(由`javac`编译)(机器中性)
* 编译代码/字节码(由`javac`编译)(机器中性)
* 执行的字节码(由 JVM 执行)(机器特定)
在步骤 2 中,`javac`(Java 编译器)将 Java 代码转换为字节码。 可以将其移动到任何计算机(Windows/Linux)并由 JVM 执行。 JVM 读取字节码并生成机器特定的代码。 为了生成特定于机器的代码,JVM 需要特定于机器。 因此,每种类型的计算机(Windows/Linux/Mac)都具有特定的 JVM。 因此,编码器
......
......@@ -144,14 +144,14 @@ Thread(String name)
到目前为止,我们遇到了线程的三种状态
*
*
* 可运行的
* 正在运行
线程还有更多状态,线程将无法运行。
* 等待/阻止/睡眠
* 已死
* 死亡
当线程的`run`方法完成执行时,该线程处于死亡状态。
......
......@@ -34,7 +34,7 @@ Selenium 命令具有三种不同的样式:*操作,访问器和断言*。
这些操作大多数都带有后缀“`AndWait`”,例如 “`clickAndWait`”。 此后缀确保 Selenium 等待新页面或元素加载。
## 存取器:
## 访问器:
这些命令用于检查应用的状态。 这些让我们将结果存储在用户定义的变量中,这些变量可用于断言的目的。 它们不会直接与页面元素交互。
......
......@@ -15,10 +15,10 @@
定位依据
* ID
* Name
* 名称
* 链接文本
* CSS
* 判断
* DOM
* XPath
## 通过 ID 定位
......
......@@ -9,7 +9,7 @@
定位依据
* CSS
* 判断
* DOM
* XPath
让我们一一看一下。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册