代码改变世界

Java 学习笔记 (二) Selenium WebDriver Java 弹出框

2018-01-03 15:22  钱先生  阅读(505)  评论(0编辑  收藏  举报

下面这段实例实现了以下功能:

1. profile使用用户本地电脑上的 (selenium 3有问题.因为selenium 3把profile复制到一个temp文件夹里,但并不复制回去.所以每次打开仍是一个空的浏览器.问题待解决)

2. 取出多个跳出框的title和内容

3. 验证打开页面的title是否正确

4. 获取页面弹出框中的验证码

  1 package com.qiujy.testweb_mvn; 
  2 import java.io.File;
  3 import java.io.IOException;
  4 import java.util.List;
  5 
  6 import org.apache.commons.io.FileUtils;
  7 import org.openqa.selenium.By;
  8 import org.openqa.selenium.Cookie;
  9 import org.openqa.selenium.OutputType;
 10 import org.openqa.selenium.TakesScreenshot;
 11 import org.openqa.selenium.WebDriver;
 12 import org.openqa.selenium.WebElement;
 13 import org.openqa.selenium.firefox.FirefoxDriver;
 14 import org.openqa.selenium.firefox.FirefoxOptions;
 15 import org.openqa.selenium.firefox.FirefoxProfile;
 16 import org.openqa.selenium.firefox.internal.ProfilesIni;
 17 import org.openqa.selenium.support.ui.ExpectedCondition;
 18 import org.openqa.selenium.support.ui.WebDriverWait;
 19 
 20 
 21 public class rememberme {
 22     private static final String WebElement = null;
 23 
 24     /**
 25      * @param args
 26      * @throws InterruptedException
 27      * @throws IOException
 28      */
 29     public static void main(String[] args) throws InterruptedException, IOException {
 30            System.setProperty("webdriver.gecko.driver", "D:\\geckodriver-v0.19.1-win64\\geckodriver.exe");
 31            ProfilesIni pi = new ProfilesIni();
 32            FirefoxProfile profile = pi.getProfile("default");
 33            FirefoxOptions options = new FirefoxOptions();
 34            options.setProfile(profile);
 35         WebDriver driver = new FirefoxDriver(options);
 36 
 37            
 38         driver.manage().window().maximize();
 39         driver.get("http://xxxxx/login");   
 40         String sysTitle = driver.getTitle();
 41         String expectedTitle="Dva Demo";
 42         if (sysTitle.equals(expectedTitle)) {
 43             System.out.println(sysTitle);
 44         } else {
 45             System.out.println("Wrong Title");
 46         }
 47           
 48         //点“注册”,打开注册页面
 49         WebElement addButton=driver.findElement(By.xpath("//*[@id=\"root\"]/div/form/div[5]/a"));
 50         addButton.click();
 51            Thread.sleep(1000);
 52            
 53         //输入注册信息
 54         WebElement userName=driver.findElement(By.xpath("//*[@id=\"nickname\"]"));
 55         userName.sendKeys("abc");
 56         WebElement password=driver.findElement(By.xpath("//*[@id=\"password\"]"));
 57         password.sendKeys("123456");
 58         WebElement cpassword=driver.findElement(By.xpath("//*[@id=\"confirm\"]"));
 59         cpassword.sendKeys("123456");
 60         WebElement mailbox=driver.findElement(By.xpath("//*[@id=\"email\"]"));
 61         mailbox.sendKeys("abc@000.com");
 62         WebElement add=driver.findElement(By.xpath("//*[@id=\"residence\"]"));
 63         add.click();
 64         WebElement add1=driver.findElement(By.xpath("/html/body/div[2]/div/div/div/ul[1]/li[1]"));
 65         add1.click();    
 66         System.out.println(add1);
 67         WebElement add2=driver.findElement(By.xpath("/html/body/div[2]/div/div/div/ul[2]/li"));
 68         add2.click();    
 69         System.out.println(add2);
 70         WebElement add3=driver.findElement(By.xpath("/html/body/div[2]/div/div/div/ul[3]/li"));
 71         add3.click();    
 72         System.out.println(add3);
 73         WebElement cellphone=driver.findElement(By.xpath("//*[@id=\"phone\"]"));
 74         cellphone.sendKeys("123456789");    
 75  
 76         //获取验证码
 77         WebElement verifycode=driver.findElement(By.className("ant-btn"));
 78         verifycode.click();
 79         WebElement text=driver.findElement(By.className("ant-notification-notice-description"));
 80         String str=text.getText();
 81         String str1=str.replaceAll("请在5min内输入验证码:","");
 82         System.out.println(str1);
 83         WebElement inputcode=driver.findElement(By.xpath("//*[@id=\"captcha\"]"));
 84         inputcode.sendKeys(str1);
 85         WebElement checkbox=driver.findElement(By.xpath("//*[@id=\"root\"]/div/form/div[8]/div/div/label/span[1]/input"));
 86         checkbox.click();
 87         File screenshotFile=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
 88         FileUtils.copyFile(screenshotFile, new File("E:\\screenshot\\Register"+System.currentTimeMillis()+".png"));
 89         WebElement register=driver.findElement(By.xpath("//*[@id=\"root\"]/div/form/div[9]/div/div/button"));
 90         register.click();
 91 
 92         //取出注册成功的提示字样
 93         WebElement text2=(new WebDriverWait(driver,10)).until(new ExpectedCondition<WebElement>() {
 94             public org.openqa.selenium.WebElement apply(WebDriver driver) {
 95                 List<org.openqa.selenium.WebElement> eles = driver.findElements(By.className("ant-notification-notice-description"));
 96                 if(eles.size() == 2 && eles.get(1).isDisplayed()) {
 97                     return eles.get(1);
 98                 }
 99                 return null;
100             }
101         });
102 
103         System.out.println(text2.getText().toString());    
104 
105         Thread.sleep(1000);
106         File screenshotFile1=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
107         FileUtils.copyFile(screenshotFile1, new File("E:\\screenshot\\Success"+System.currentTimeMillis()+".png"));
108         
109         
110         
111         
112         
113         //用刚刚注册的帐号登录
114         WebElement uName=driver.findElement(By.xpath("//*[@id=\"userName\"]"));
115         uName.sendKeys("abc");
116         WebElement pwd=driver.findElement(By.xpath("//*[@id=\"password\"]"));
117         pwd.sendKeys("123456");    
118         WebElement Button=driver.findElement(By.xpath("//*[@id=\"root\"]/div/form/div[4]/button"));
119         Button.click();
120         File screenshotFile2=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
121         FileUtils.copyFile(screenshotFile2, new File("E:\\screenshot\\login"+System.currentTimeMillis()+".png"));
122         
123         
124         
125         //取出登录成功的提示框title
126         WebElement text3=(new WebDriverWait(driver, 10)).until(new ExpectedCondition<WebElement>(){
127             public org.openqa.selenium.WebElement apply(WebDriver driver){
128                 List<org.openqa.selenium.WebElement> eles = driver.findElements(By.className("ant-notification-notice-message"));
129                 if(eles.size()==3 && eles.get(2).isDisplayed()) {
130                     return eles.get(2);
131                 }
132                 return  null;
133             }
134         });
135         System.out.println(text3.getText().toString());
136         
137         
138         
139         
140         //取出登录成功的提示字样
141         WebElement text4=(new WebDriverWait(driver, 10)).until(new ExpectedCondition<WebElement>(){
142             public org.openqa.selenium.WebElement apply(WebDriver driver){
143                 List<org.openqa.selenium.WebElement> eles = driver.findElements(By.className("ant-notification-notice-description"));
144                 if(eles.size()==3 && eles.get(2).isDisplayed()) {
145                     return eles.get(2);
146                 }
147                 return  null;
148             }
149         });
150         System.out.println(text4.getText().toString());
151             
152         File screenshotFile3=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
153         FileUtils.copyFile(screenshotFile3, new File("E:\\screenshot\\LS"+System.currentTimeMillis()+".png"));        
154         
155         Thread.sleep(10000);
156         
157 //        重新登录的时候因为已经记忆了密码和帐号信息, 所以不用再次输入, 直接点login就好
158         driver.get("http://xxxxx/login");   
159 //        WebElement uName2=driver.findElement(By.xpath("//*[@id=\"userName\"]"));
160 //        uName2.sendKeys("abc");
161 //        WebElement pwd2=driver.findElement(By.xpath("//*[@id=\"password\"]"));
162 //        pwd2.sendKeys("123456");    
163         File screenshotFile4=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
164         FileUtils.copyFile(screenshotFile4, new File("E:\\screenshot\\relogin"+System.currentTimeMillis()+".png"));
165         WebElement Button2=driver.findElement(By.xpath("//*[@id=\"root\"]/div/form/div[4]/button"));
166         Button2.click();
167                 WebElement text5=(new WebDriverWait(driver, 10)).until(new ExpectedCondition<WebElement>(){
168             public org.openqa.selenium.WebElement apply(WebDriver driver){
169                 List<org.openqa.selenium.WebElement> eles = driver.findElements(By.className("ant-notification-notice-description"));
170                 if(eles.size()==2 && eles.get(1).isDisplayed()) {
171                     return eles.get(1);
172                 }
173                 return  null;
174             }
175         });
176         System.out.println(text5.getText().toString());        
177         Thread.sleep(1000);
178         File screenshotFile5=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
179         FileUtils.copyFile(screenshotFile5, new File("E:\\screenshot\\reloginpost"+System.currentTimeMillis()+".png"));
180         
181         
182         
183         
184 //        再次打开登录页面,输入帐户密码(因系统已记忆 ,再输入会造成帐户密码信息double, 如帐户变成: abcabc)
185         driver.get("http://xxxxx/login");   
186         WebElement uName2=driver.findElement(By.xpath("//*[@id=\"userName\"]"));
187         uName2.sendKeys("abc");
188         WebElement pwd2=driver.findElement(By.xpath("//*[@id=\"password\"]"));
189         pwd2.sendKeys("123456");    
190         File screenshotFile6=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
191         FileUtils.copyFile(screenshotFile6, new File("E:\\screenshot\\relogin2"+System.currentTimeMillis()+".png"));
192         WebElement Button3=driver.findElement(By.xpath("//*[@id=\"root\"]/div/form/div[4]/button"));
193         Button3.click();
194         Thread.sleep(1000);
195 //        实际出现了三个提示框 ,前两个显示登录成功, 最后一个显示失败,但是仍然打开了内容页。
196         //取出第一个提示框title
197         WebElement text6=(new WebDriverWait(driver, 10)).until(new ExpectedCondition<WebElement>(){
198             public org.openqa.selenium.WebElement apply(WebDriver driver){
199                 List<org.openqa.selenium.WebElement> eles = driver.findElements(By.className("ant-notification-notice-message"));
200                 if(eles.size()==2 && eles.get(0).isDisplayed()) {
201                     return eles.get(0);
202                 }
203                 return  null;
204             }
205         });
206         System.out.println(text6.getText().toString());
207         
208         
209         
210         
211         //取出第一个提示框内容
212         WebElement text7=(new WebDriverWait(driver, 10)).until(new ExpectedCondition<WebElement>(){
213             public org.openqa.selenium.WebElement apply(WebDriver driver){
214                 List<org.openqa.selenium.WebElement> eles = driver.findElements(By.className("ant-notification-notice-description"));
215                 if(eles.size()==2 && eles.get(0).isDisplayed()) {
216                     return eles.get(0);
217                 }
218                 return  null;
219             }
220         });
221         System.out.println(text7.getText().toString());        
222         
223         
224         
225         //取出第二个提示框title
226         WebElement text8=(new WebDriverWait(driver, 10)).until(new ExpectedCondition<WebElement>(){
227             public org.openqa.selenium.WebElement apply(WebDriver driver){
228                 List<org.openqa.selenium.WebElement> eles = driver.findElements(By.className("ant-notification-notice-message"));
229                 if(eles.size()==2 && eles.get(1).isDisplayed()) {
230                     return eles.get(1);
231                 }
232                 return  null;
233             }
234         });
235         System.out.println(text8.getText().toString());
236         
237         
238         
239         
240         //取出第二个提示框内容
241         WebElement text9=(new WebDriverWait(driver, 10)).until(new ExpectedCondition<WebElement>(){
242             public org.openqa.selenium.WebElement apply(WebDriver driver){
243                 List<org.openqa.selenium.WebElement> eles = driver.findElements(By.className("ant-notification-notice-description"));
244                 if(eles.size()==2 && eles.get(1).isDisplayed()) {
245                     return eles.get(1);
246                 }
247                 return  null;
248             }
249         });
250         System.out.println(text9.getText().toString());    
251         
252         Thread.sleep(1000);
253         File screenshotFile7=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
254         FileUtils.copyFile(screenshotFile7, new File("E:\\screenshot\\reloginpost"+System.currentTimeMillis()+".png"));
255         
256         
257         
258         
259          driver.quit();
260      
261     }
262 
263 }
264 
265 /**
266 *@author: Created by Qian
267 *@date: 2017年12月27日 268 *@problem: after login successfully, reopen browser(with cookies), input name/password(which make the data double. e.g. name :abcabc), then click login, window pops up to alert user that login failed, but actually it's still navigated to content page. this can be reproduced no matter manually or by script. 269 **@answer: 270 *@action: 271 */