章节十五、3-对象仓库、Page Factory实例应用
一、如何创建对象仓库
package pageclasses; import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory; public class SearchPageFactory { WebDriver driver; //如何创建对象工厂
//创建对象仓库需要用到FindBy这个组件,FindBy可以告诉selenium用什么方式来查找元素
@FindBy(id="tab-flight-tab-hp")
WebElement fly; @FindBy(xpath="//input[@id='flight-origin-hp-flight']")
WebElement startText; @FindBy(xpath="//input[@id='flight-destination-hp-flight']")
WebElement endText; @FindBy(xpath="//input[@id='flight-departing-hp-flight']")
WebElement startData; @FindBy(xpath="//input[@id='flight-returning-hp-flight']")
WebElement returnData; @FindBy(xpath="//div[@class='cols-nested ab25184-submit']//button[@class='btn-primary btn-action gcw-submit']")
WebElement searchButton; public SearchPageFactory(WebDriver driver) {
this.driver = driver;
// 对查找的元素进行初始化,然好我们就可以使用了
// this表示本类型的对象
PageFactory.initElements(driver, this);
} //操作仓库中的元素
public void clickFly() {
fly.click();
} public void writStartText(String text) {
startText.sendKeys(text);
} public void writEndText(String text) {
endText.sendKeys(text);
} public void writStartData(String text) {
startData.sendKeys(text);
} public void writReturnData(String text) {
returnData.sendKeys(text);
} public void clickSearchButton() {
searchButton.click();
}
}
1、如何创建对象仓库:
@FindBy(id="tab-flight-tab-hp")
WebElement fly;
Id:表示查找元素的方式(还有XPath、name等)
tab-flight-tab-hp:表示需要查找的元素
Fly:表示是WebElement类型的变量名
2、对对象仓库查找的元素进行初始化,以便于我们可以使用:PageFactory.initElements(driver, this);
driver:表示浏览器对象
This:表示本类型的对象
二、实例引用对象仓库
package pageclasses; import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.runner.notification.RunListener.ThreadSafe;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver; class FarmeworkTestCase { WebDriver driver;
String url;
SearchPageFactory search; @BeforeEach
void setUp() throws Exception {
driver = new ChromeDriver();
search = new SearchPageFactory(driver);
url = "https://www.expedia.com/";
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get(url);
} @Test
void test() throws InterruptedException {
// 点击机票按钮,进入机票预订页面
search.clickFly();
// 舒服出发地
search.writStartText("长沙, 中国 (CSX-黄花国际机场)");
// 输入目的地
Thread.sleep(2000);
search.writEndText("上海, 中国 (PVG-浦东国际机场)");
// 输入出发日期
search.writStartData("08/01/2019");
// 输入返程日期
search.writReturnData("08/03/2019");
// 点搜索按钮
search.clickSearchButton();
} @AfterEach
void tearDown() throws Exception {
Thread.sleep(2000);
driver.quit();
}
}
如果有不明白的小伙伴可以加群“555191854”问我,群里都是软件行业的小伙伴相互一起学习。
内容具有连惯性,未标注的地方可以看前面的博客,这是一整套关于ava+selenium自动化的内容,从java基础开始。
欢迎关注,转载请注明来源。
章节十五、3-对象仓库、Page Factory实例应用的更多相关文章
- 章节十五、5-记录日志---Log4j
一.为什么要用Log4j记录日志? 日志记录对于任何应用程序都非常重要. 它可以帮助我们快速调试代码,通过收集代码执行的信息让代码容易维护. 二.Log4j 是什么? Apache为Java提供的日志 ...
- javaweb学习总结二十五(response对象的用法一)
一:Reponse对象的概念 当客户端发送http请求时,服务器端会对每一次请求,创建request对象和response对象. response对象包括三个部分:响应头.响应状态码以及响应体 二:r ...
- JavaScript学习笔记(十五)——对象之Date,RegExp
在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...
- 章节十五、6-log4 2-用默认的配置
一.实例演示 package log4jtutorial; import org.apache.logging.log4j.LogManager; import org.apache.logging. ...
- 章节十五、7- 配置文件-Console Logging
一.创建xml文件 1.创建xml文件 在项目中我们需要专门建一个文件夹来放xml文件或者是其它文件. 2.然后对文件夹进行命名 3.选择new 其它 4.选择XML File 5.给xml文件命名 ...
- 章节十五、9-自定义Loggers
一.如何给不同的包设置不同的日志级别? 1.针对不同的包来记录不同级别的日志信息 2.在日志xml配置文件中加入配置信息(红色标注) <?xml version="1.0" ...
- 章节十五、8-配置文件File Logging
一.如何将log输出到文件中? 1.配置xml文件 <?xml version="1.0" encoding="UTF-8"?> <Confi ...
- 章节十五、2-PageObjectModel
一.在实现自动化过程中,会有很多重复的代码,我们在维护代码时会很困难,如果想解决这个问题,我们就需要使用PageObjectModel(页面对象模型)的方式来进行自动化代码的书写. 二.案例演示 以该 ...
- 三十五.MySQL读写分离 MySQL多实例 、MySQL性能调优
1.实现MySQL读写分离 搭建一主一从结构 配置maxscale代理服务器 测试分离配置 1.1 搭建一主一从结构 192.168.4.51 主 192.168.4.52 从 测试OK 1. ...
随机推荐
- Git 备忘录
整理了一下工作中常用的 Git 操作,持续更新中... merge单个文件 例如 B分支想要合并A分支的某个文件 首先,我们切换到B分支 git checkout branch B 之后,我们c ...
- 不用 qlv 格式转换成 mp4 - 优雅的下载腾讯视频(mp4 格式)
不用 qlv 格式转换成 mp4 - 优雅的下载腾讯视频(mp4 格式) 问题描述: 朋友说离线腾讯视频是 qlv 格式的,只能使用腾讯视频软件打开.让我帮忙想想办法,能不能将 qlv 格式转换成 m ...
- Metasploit渗透测试
原创博客,转载请注出处! 学习笔记 参考书籍<Metasploit渗透测试指南(修订版)> 经过多日学习,初步掌握metasploit基本参数和使用方法,现进行渗透测试实践 靶机IP:16 ...
- System.arraycopy 和 Arrays.copyOf
System.arraycopy /* native关键字 本地方法 System类 java.lang.System.class 参数说明: src - 源数组. srcPos - 源数组中的起始位 ...
- Spring Boot:使用Memcached缓存
综合概述 Memcached是一个自由开源的,高性能,分布式内存对象缓存系统.Memcached基于内存的key-value存储,用来存储小块的任意数据,这些数据可以是数据库调用.API调用或者是页面 ...
- 戴尔R720安装ESXI系统
1.U盘安装系统,使用UltraISO制作启动盘 参考地址:https://jingyan.baidu.com/article/5225f26b0bb45fe6fa0908bc.html 2.插上U盘 ...
- 简单的python爬虫实例
目标网站:https://www.quanjing.com/category/1286521/2.html 爬取搜索出来的所有“中东人”的图片: 先看一下源代码,找到存放图片链接的地方,在源代码最下面 ...
- mysql复制那点事 - Seconds_behind_Master参数调查笔记
目录 mysql复制那点事 - Seconds_behind_Master参数调查笔记 0. 参考文献 1. 问题背景 2. 调查结论 3. 调查与分析过程 3.1 轮转binlog时的运行逻辑 3. ...
- scrapy基础知识之scrapy自动下载图片pipelines
需要在settings.py配置: ITEM_PIPELINES = { 'scrapy.pipelines.images.ImagesPipeline': 1, }import os IMAGES_ ...
- zookeeper的客户端应用
什么zookeeper? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供 ...