Page Object实例(一) - Java + Selenium 登录163邮箱

Page Object 是什么:

  Page Object是Selenium2开始提供的一种代码设计模式. 其核心思想是把web页面的元素查找及操作和页面测试分离开. 这样之后的更新和维护中如果有页面元素变动, 不需要修改测试类, 只要修改其对应的页面元素的查找代码即可.

登录163邮箱的实例包括:

其中:

1. LoginPage.java 是主要测试页面, 包括查找元素, 操作元素实现登录

2. HomePage.java 是登录成功后会跳转到的页面, 在此用来作为登录操作方法的返回值及拿个元素验证登录成功, 更多的是可以接着对此页面进行测试

3. LoginTest.java用来执行登录页面的测试, 可以包括验证登录成功/失败或其他测试用例

4. SeleniumInit.java 用来起driver, 里面可以放起不同浏览器的方法

实例代码:

LoginPage.java

 1 import org.openqa.selenium.By;
 2 import org.openqa.selenium.WebDriver;
 3 import org.openqa.selenium.WebElement;
 4 import java.util.List;
 5 import java.util.concurrent.TimeUnit;
 6
 7 public class LoginPage {
 8     WebDriver driver;
 9
10     public LoginPage(WebDriver driver) {
11         this.driver = driver;
12     }
13
14     //登录方法
15     public HomePage login(String user, String pwd) {
16         //隐式等待页面的加载
17         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
18         WebElement accountLogin = driver.findElement(By.id("lbNormal"));
19         accountLogin.click();
20         //进入frame
21         List<WebElement> iframes = driver.findElements(By.tagName("iframe"));
22         String id = iframes.get(0).getAttribute("id");
23         if (id != null) {
24             driver.switchTo().frame(id);
25         }
26         WebElement loginEmail = driver.findElement(By.name("email"));
27         WebElement loginPassword = driver.findElement(By.name("password"));
28         WebElement loginButton = driver.findElement(By.id("dologin"));
29         loginEmail.sendKeys(user);
30         loginPassword.sendKeys(pwd);
31         loginButton.click();
32         //跳出frame
33         driver.switchTo().defaultContent();
34         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
35         //登录成功后跳转到新页面, 新页面的元素及处理和当前页面分离
36         return new HomePage(driver);
37     }
38 }

HomePage.java

 1 import org.openqa.selenium.By;
 2 import org.openqa.selenium.WebDriver;
 3 import org.openqa.selenium.WebElement;
 4
 5 public class HomePage {
 6     WebDriver driver;
 7
 8     public HomePage(WebDriver driver) {
 9         this.driver = driver;
10     }
11
12     //判断登录是否成功的方法, 当前页面类似收发邮件可另加方法
13     public boolean idExists() {
14         WebElement userID = driver.findElement(By.id("spnUid"));
15         System.out.println(userID.getText());
16         return userID.isDisplayed();
17     }
18 }

LoginTest.java

 1 import org.openqa.selenium.WebDriver;
 2 import org.openqa.selenium.support.PageFactory;
 3 import org.testng.Assert;
 4 import org.testng.annotations.Test;
 5 import po.selenium.pages.HomePage;
 6 import po.selenium.pages.LoginPage;
 7 import po.selenium.utils.SeleniumInit;
 8
 9 public class LoginTest {
10     String URL = "https://mail.163.com/";
11     @Test
12     public void TC001_LoginSuccess() {
13         String user = "邮箱账号";
14         String pwd = "邮箱密码";
15         SeleniumInit seleniumInit = new SeleniumInit();
16         WebDriver driver = seleniumInit.getFFDriver();
17         try {
18             driver.get(URL);
19             LoginPage loginPage = new LoginPage(driver);
20             PageFactory.initElements(driver, loginPage);
21             HomePage homePage = loginPage.login(user, pwd);
22             Assert.assertTrue(homePage.idExists(), "login failed");
23         } catch (Exception e) {
24             e.printStackTrace();
25         } finally {
26             driver.quit();
27         }
28     }
29
30     @Test
31     public void TC002_LoginFailedWithWrongPwd() {
32         String user = "邮箱账号";
33         String pwd = "错误的邮箱密码";
34         SeleniumInit seleniumInit = new SeleniumInit();
35         WebDriver driver = seleniumInit.getFFDriver();
36         try {
37             driver.get(URL);
38             LoginPage loginPage = new LoginPage(driver);
39             PageFactory.initElements(driver, loginPage);
40             //同一个页面, 同一个方法可以进行不同的测试
41             HomePage homePage = loginPage.login(user, pwd);
42             Assert.assertTrue(homePage.idExists(), "login failed");
43         } catch (Exception e) {
44             e.printStackTrace();
45         } finally {
46             driver.quit();
47         }
48     }
49 }

以上就是Page Object 的页面与操作与测试分离的思想, 主要用来展示页面分离的思想, 还有类似页面元素和操作耦合在一起, URL这类信息暴露等问题, 之后一一解决.

原文地址:https://www.cnblogs.com/fayez/p/11702727.html

时间: 2024-10-25 08:23:46

Page Object实例(一) - Java + Selenium 登录163邮箱的相关文章

[Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍

目录(?)[+] 前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索"Eastmount"关键字及截图的功能.而这篇文章主要简单介绍如何实现自动登录163邮箱,同时继续介绍Selenium+Python官网Locating Elements部分内容.        希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~        [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)        

【webdriver自动化】使用unittest实现自动登录163邮箱然后新建一个联系人

#练习:登录163邮箱然后新建一个联系人 import unittest import time from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver import ActionChains from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.su

5、Selenium+Python自动登录163邮箱发送邮件

1.Selenium实现自动化,需要定位元素,以下查看163邮箱的登录元素 (1)登录(定位到登录框,登录框是一个iframe,如果没有定位到iframe,是无法定位到账号框与密码框) 定位到邮箱框(name='email') 定位到密码框(name='password') 定位到登录按钮(id="dologin") 2.代码实现 #coding=utf-8 import time from selenium import webdriver broswer = webdriver.I

[转][Python][自动登录163邮箱]

#-*- coding:UTF-8 -*-import urllib,urllib2,cookielibimport xml.etree.ElementTree as etree #xml解析类 class Login163:   #伪装browser    header = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}    us

python+selenium实现163邮箱自动登陆

让我们先来预览一下代码运行效果吧: 首先分析163邮箱登陆页面的网页结构(按F12或单击鼠标右键选择审查元素) 1.定位到登陆框(注意登录框是一个iframe,如果不定位到iframe的话是无法找到之后的邮箱地址框和密码输入框的) 2.定位到邮箱地址框(name='email') 3.定位到密码输入框(name='password') 4.定位到登陆按钮(id='dologin') 5.分析完毕,现在就可以写代码实现163邮箱的自动登陆啦(附有代码的详细解析!) #coding:utf-8 fr

登录163邮箱发邮件

#encoding=utf-8 from selenium import webdriver import time from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By #打开浏览器 driver = webdriver.

python+selenium 模拟163邮箱登录

代码如下:from selenium import webdriverfrom time import sleepdriver=webdriver.Chrome()driver.get("https://mail.163.com/")sleep(1)driver.find_element_by_id("lbNormal").click()sleep(3)#login_frame=driver.find_element_by_id("x-URS-iframe

selenium(六)Page Object模式(使用selenium的PageFactory)

PageObject 类 import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.openqa.selenium.support.PageFactory; public class PageObject { private String url="http://www.baidu.com&qu

selenium2+python3登录163邮箱

首先查看页面的整个登录流程: 打开mail.163.com→点击邮箱账号登录→账号输入框→密码输入框→登录 一.单一流程实现:打开网页,找到邮箱账号登录,输入账号密码,登录 # 导入webdriver驱动 from selenium import webdriver from time import ctime # 新建火狐浏览器驱动 dr = webdriver.Firefox() dr.get('https://mail.163.com') # 点击邮箱账号登录,使用xpath定位 dr.f