selenium:selenium是一个自动化测试工具,支持chrome,firefox,Safari等主流浏览器的。下载对应浏览器的驱动,就能使用selenium对web页面进行测试。

PageObject:其实是一种设计模式,总的来说就是把每一个页面封装成一个对象。对页面的操作写成一个方法。好处在于当前端ui修改后,我们不需要到每一个测试用例上修改,只需要修改页面对应的类即可。

下面针对知乎登陆实现具体的测试用例。

项目的结构如下:

其实pages存放的每个页面对应的对象,tests文件夹是测试用例,utilities是一些辅助类。

测试框架我们使用的testNG框架

整个项目所需要的依赖入下:

org.seleniumhq.selenium

selenium-java

3.14.0

test

org.testng

testng

6.14.3

packagepages;import io.appium.java_client.android.*;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.support.ui.ExpectedConditions;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.support.ui.WebDriverWait;importorg.openqa.selenium.support.PageFactory;importorg.openqa.selenium.By;importorg.testng.Assert;public classBasePage {

publicWebDriver driver;publicWebDriverWait wait;publicBasePage(WebDriver driver){this.driver=driver;

wait= new WebDriverWait(driver,15);

}public voidwaitVisibility(By elementBy){

wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(elementBy));

}public voidclick(By elementBy){

waitVisibility(elementBy);

driver.findElement(elementBy).click();

}public voidwriteText(By elementBy,String text){

waitVisibility(elementBy);

driver.findElement(elementBy).sendKeys(text);

}publicString readText(By elementBy){

waitVisibility(elementBy);returndriver.findElement(elementBy).getText();

}public voidassertEquals(By elementBy,String expectedText){

waitVisibility(elementBy);

Assert.assertEquals(readText(elementBy),expectedText);

}

}

BasePage类是所有page类的基类,包括初始化浏览器驱动和一些页面常见的操作。

BaseTest.java

packagetests;importorg.openqa.selenium.remote.CapabilityType;importorg.openqa.selenium.remote.DesiredCapabilities;importorg.testng.annotations.AfterClass;importorg.testng.annotations.BeforeClass;importio.appium.java_client.AppiumDriver;importio.appium.java_client.android.AndroidDriver;importio.appium.java_client.remote.MobileCapabilityType;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.chrome.ChromeDriver;importjava.net.MalformedURLException;importjava.net.URL;public classBaseTest {publicWebDriver driver;@BeforeClasspublic voidsetup(){

System.setProperty("webdriver.chrome.driver","D:\\\\chrome-driver\\chromedriver.exe");

driver= newChromeDriver();

driver.manage().window().maximize();

}

@AfterClasspublic voidteardown(){

driver.quit();

}

}

BaseTest.java实现的测试前准备动作,测试完成的动作。

LoginTest.java

packagetests;importpages.HomePage;importpages.LoginPage;importorg.testng.annotations.Test;public class LoginTest extendsBaseTest {

@Testpublic voidinvalidLoginTest_InvalidUserNameInvalidPassword() {

HomePage homePage= newHomePage(driver);

homePage.goToN11()

.goToLoginPage()

.loginToZhihu("email@qq.com", "password")

.verifyLoginPassword("账号或密码错误");

}

@Testpublic voidinvalidLoginTest_EmptyUsernameAndPassword(){

HomePage homePage= newHomePage(driver);

homePage.goToN11()

.goToLoginPage()

.loginToZhihu("","")

.verifyLoginUserName("请输入手机号或邮箱")

.verifyLoginPassword("请输入密码");

}

}

LoginTest是针对知乎登陆写的具体测试用例,这里包括两个测试用例。一个是使用错误的的账号和密码进行登陆。第二个是使用的空的账号和密码。

然后给出预期的应该出现的结果。

HomePage.java

packagepages;importorg.openqa.selenium.By;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.support.ui.ExpectedCondition;importorg.openqa.selenium.support.ui.WebDriverWait;importsun.rmi.runtime.Log;public class HomePage extendsBasePage{publicHomePage(WebDriver driver){super(driver);

}

String baseURL= "https://www.zhihu.com";

By signInButtonBy= By.xpath("//*[@id=\"root\"]/div/main/div/div/div/div[2]/div[2]/span");publicHomePage goToN11(){

driver.get(baseURL);return this;

}publicLoginPage goToLoginPage(){

click(signInButtonBy);return newLoginPage(driver);

}

}

HomePage主要是唤起浏览器,进入到知乎的首页,然后通过找到登录按钮,跳转到登录页面。

知乎的首页如图所示,我们通过xpath找到"登录”按钮所在的位置,然后点击,跳转到登录页面。

登录页面如下

LoginPage.java

packagepages;importpages.BasePage;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.By;importio.appium.java_client.android.AndroidElement;importio.appium.java_client.android.AndroidDriver;importorg.testng.asserts.Assertion;public class LoginPage extendsBasePage {

By usernameBy= By.name("username");

By passwordBy= By.name("password");

By loginButtonBy= By.className("SignFlow-submitButton");publicLoginPage(WebDriver driver) {super(driver);

}publicLoginPage loginToZhihu(String username, String password) {

writeText(usernameBy, username);

writeText(passwordBy, password);

click(loginButtonBy);return this;

}publicLoginPage verifyLoginUserName(String expectedText){

By errorMessageUsernameBy= By.xpath("//*[@id=\"root\"]/div/main/div/div/div/div[2]/div[1]/form/div[1]/div[2]/div[2]");

assertEquals(errorMessageUsernameBy,expectedText);return this;

}publicLoginPage verifyLoginPassword(String expectedText){

By errorMessagePasswordBy= By.xpath("//*[@id=\"root\"]/div/main/div/div/div/div[2]/div[1]/form/div[2]/div/div[2]");

assertEquals(errorMessagePasswordBy,expectedText);return this;

}

}

LoginPage.java主要实现了找到账号和密码元素所在的位置,然后进行填充。还有一个方法就是使用断言,看看出现的结果和预期的结果是否一致。这里的两个断言的分别的对应是LoginTest.java对应的两个测试用例中的对结果的判断。

errorMessageUsernameBy表示的是实际结果,

expectedText表示的预期结果。

然后我们启动LoginTest类,不出意外的话,Failures:0。但我这个用例中chrome版本太高了,登录知乎出现了missing argument grant_type错误。据说可以通过降低chrome版本结局

其实这个代码还是有问题,要想登录知乎,有些输入验证码。验证码的问题后面再讲。

java webdriver page object_Selenium+PageObject+Java实现测试用例相关推荐

  1. java webdriver page object_Selenium2(java)页面对象模型(Page Object) 八

    在开发一个 Selenium WebDriver 测试,我们可以使用页面对象模型.这个模型可以使测 试脚本有更高的可维护性,减少了重复的代码,把页面抽象出来.对象模型也提供了一个注释,帮助缓存远程,避 ...

  2. Java Server Page

    JSP JSP全称是Java Server Page,基于Java和Servlet一样是sun公司推出的一套开发动态web资源的技术,称为JSP/Servlet规范.JSP的本质其实就是一个Servl ...

  3. JSP:Java Server Page(1)

    JSP:Java Server Page JSP的本质:Jsp是一种动态网页技术! 动态生成网页数据,而不是有动态效果的网页!--动态效果用JavaScript实现 常见的几种动态网页技术:jsp.A ...

  4. Java+webdriver的自动化测试框架搭建

    一.webdriver简介 webdriver是一种支持web应用程序自动化测试的工具,利用浏览器原生的API,封装成一套更加面向对象的selenium webdriver API,直接操作浏览器里的 ...

  5. JSP技术已死 ? (Java Server Page technology will die) ?

    JSP技术已死 ? (Java Server Page technology will die) ? 自从JamesGosling开发Java语言,SUN大力推行基于Java的从前端到后端的完整的企业 ...

  6. java+SpringBoot+HTML+Mysq基于Java语言开发的奶茶外卖平台

     详细功能设计:请点击下面链接查看 java+SpringBoot+HTML+Mysq基于Java语言开发的奶茶外卖平台_哔哩哔哩_bilibili 源码+论文获取: 源码+论文获取请私信获取 摘   ...

  7. java后端面试大全,java后端面试宝典

    文章目录 -2 flink -1 linux of view linux查看占用cup最高的10个进程的命令: 〇.分布式锁 & 分布式事务 0-1分布式锁--包含CAP理论模型 概述 分布式 ...

  8. java培训分享:学习Java需要什么软件

    在参加java培训过程中学习java技术,需要用到很多辅助工具,这些辅助工具是具有多功能性和实用性的,从代码构建到bug压缩.学习这些工具可以帮助您提高代码的质量,并成为一个更高效的Java开发人员. ...

  9. java.awt.headless 模式(Linux, java.awt.headless and the DISPLAY environment variable)

    http://blog.chinaunix.net/uid-25098298-id-287544.html 1. 什么是 java.awt.headless? Headless模式是系统的一种配置模式 ...

最新文章

  1. 分析隐藏在比特币区块链中的Pony CC服务器
  2. linux内核 块驱动程序,linux – 为什么内核使用默认的块驱动程序而不是我的驱动程序代码?...
  3. python桌面应用html_是否将Python后端与HTML / CSS / JS用户界面集成到桌面应用程序? - javascript...
  4. (1)触发器systemverilog与VHDL编码
  5. java按两列输出_有没有一种简单的方法可以将两列输出到Java中的控制台? - java...
  6. VS编译错误:winsock.h winsock2.h ws2def.h 重定义
  7. Log4j配置使用的简单教程
  8. 英语的句号在c语言中是什么意思,英语标点符号的用法
  9. apk逆向思路_逆向练手——从一个apk简单逆向看消息摘要算法
  10. intel服务器芯片组历史,Intel单路服务器芯片组披露
  11. 为什么可以做Shopyy独立站
  12. Flutter onGenerateRoute 路由管理
  13. 防火墙相关知识,有备无患
  14. Selenium_获取相对坐标
  15. Package pdftex.def Error: PDF mode expected, but DVI mode detected!
  16. 详解ShellShock 漏洞复现原理,内附ShellShock的修复方法
  17. 自适应阈值(adaptiveThreshold)分割原理及实现
  18. 真正的互联网诞生:TCP/IP协议的出现
  19. gm220s路由器怎么设置_二级路由器怎么设置_二级路由器设置图解教程-192路由网...
  20. U盘引导盘制作工具 Rufus 3.13.1730 正式版

热门文章

  1. 书评 —— 《Go语言编程》
  2. C++实现的简单vector
  3. js运动 运动效果留言本
  4. 八天学会MongoDB:第三天 细说高级操作
  5. html中Marquee属性详解
  6. golang 追加内容到文件
  7. linux expect 自动交互 执行命令 超时 不完整 中断 解决方法
  8. pycharm 调试错误 Connection to Python debugger failed: Socket operation on nonsocket: configureBlocking
  9. linux shell /dev/tcp/${HOST}/${PORT} 简介
  10. linux ioctl 设备操作函数 r3到r0 应用层 驱动层 通讯