selenium webdriver 学习笔记(2)-关于内嵌页面frame的切换和导出文件时浏览器弹出窗口的操作

1.当我开始写脚本的时候,发现我们项目的模块都是用的内嵌页面frame做的,直接定位ID找不到相应的元素,需要先切换到内嵌页面,再通过常规的定位元素找到。

2.当我做到最后一步导出Excel文件的时候,跳出的下载窗口竟然无法操作。后来我用robot通过控制鼠标来点击保存按钮,但是不知道为什么直接初始化Robot对象去点保存不会执行,所以我通过Robot控制鼠标先点击导出按钮,再点击保存。

  1 package selenium_test;
  2 
  3 import org.junit.*;
  4 import static org.junit.Assert.*;
  5 
  6 import java.awt.Robot;
  7 import java.awt.Toolkit;
  8 import java.awt.event.InputEvent;
  9 import java.awt.event.KeyEvent;
 10 import org.openqa.selenium.*;
 11 import org.openqa.selenium.ie.InternetExplorerDriver;
 12 import org.openqa.selenium.support.ui.ExpectedCondition;
 13 import org.openqa.selenium.support.ui.WebDriverWait;
 14 
 15 public class PRMlogin {
 16     private WebDriver driver;
 17     private boolean acceptNextAlert = true;
 18     private StringBuffer verificationErrors = new StringBuffer();
 19 
 20     @Before
 21     public void setUp() throws Exception {
 22         //设置启动ie的IEdriverServer,我下载的是32位的,就在名称后边加了个32。
 23         System.setProperty("webdriver.ie.driver", "C:\\Program Files (x86)\\Internet Explorer\\IEDriverServer32.exe");
 24         //启动浏览器
 25         driver = new InternetExplorerDriver();
 26         System.out.println("before执行");
 27 
 28     }
 29     @Test
 30     public void test123() throws Exception {
 31         //进入需要测试的PRM网址
 32         driver.get("http://211.94.36.125:11254/portal/security/login.xhtml");
 33         //清空username输入框
 34         driver.findElement(By.id("username")).clear();
 35         //输入用户名
 36         driver.findElement(By.id("username")).sendKeys("yinyue_zb");
 37         //同上
 38         driver.findElement(By.id("password")).clear();
 39         driver.findElement(By.id("password")).sendKeys("123");
 40         //这儿有一个验证码要输入,我设置让他睡5秒,我自己输入,正常可以让开发设置一个万能码或者直接去掉验证码
 41          Thread.sleep(5000);
 42          //点击登录按钮
 43         driver.findElement(By.id("loginButton")).click();
 44         //验证是否登录成功
 45         (new WebDriverWait(driver, 10)).until(new ExpectedCondition<Boolean>() {
 46             public Boolean apply(WebDriver d) {
 47                 return d.getCurrentUrl().toLowerCase().endsWith("http://211.94.36.125:11254/portal/portalsso.xhtml");
 48             }
 49         });
 50          System.out.println("登录成功!");
 51                 Thread.sleep(5000);
 52                 //点击信用管理
 53                  driver.findElement(By.linkText("信用管理")).click();
 54                  //在这儿之后,我发现获取不到信用管理之下的模块,看了下源代码,发现是一个内嵌页面
 55                  //找了下资料,利用driver.switchTo().frame("frame-name")方法调到内嵌页面中,
 56                  //driver.switchTo().defaultContent();跳出内嵌页面
 57                  driver.switchTo().frame("tab-7-frame");
 58                  Thread.sleep(10000);         
 59                  driver.findElement(By.linkText("投诉管理")).click();
 60                  Thread.sleep(100);        
 61                 driver.findElement(By.linkText("投诉查询")).click();
 62                 Thread.sleep(100);        
 63                 driver.findElement(By.linkText("客服投诉查询")).click();
 64                  Thread.sleep(5000);
 65                  //选择账期
 66                  driver.findElement(By.id("queryFields:j_id88PopupButton")).click();
 67                  driver.findElement(By.className("rich-calendar-tool-btn")).click();
 68                  driver.findElement(By.id("queryFields:j_id88DayCell1")).click();
 69                  driver.findElement(By.id("queryFields:j_id90PopupButton")).click();
 70                  driver.findElement(By.id("queryFields:j_id90DayCell2")).click();
 71                  //点击查询按钮
 72                  driver.findElement(By.id("queryFields:j_id116")).click();
 73                  Thread.sleep(5000);
 74                 //初始化Robot对象
 75                  final Robot rb = new Robot();
 76                    //启动一个线程
 77                     new Thread() {
 78                         public void run() {
 79                             rb.delay(2000);
 80                             // 模拟回车
 81                             rb.keyPress(KeyEvent.VK_ENTER);
 82                             rb.keyRelease(KeyEvent.VK_ENTER);
 83                         }}.start(); 
 84                         //延迟1.5s
 85                         rb.delay(1500);
 86                         //确定好导出按钮的x,y坐标
 87                         int x=Toolkit.getDefaultToolkit().getScreenSize().width-1550;
 88                         int y=Toolkit.getDefaultToolkit().getScreenSize().height-640;
 89                         //移动鼠标到导出按钮,并用鼠标点击,
 90                         //BUTTON1_MASK代表左键,BUTTON3_MASK代表右键,双键鼠标BUTTON2_MASK代表右键
 91                         rb.mouseMove(x, y);
 92                         rb.delay(500); 
 93                         pressMouse(rb, InputEvent.BUTTON1_MASK, 500);
 94                         Thread.sleep(5000);
 95                         //确定好保存按钮的x,y坐标
 96                         int x1=Toolkit.getDefaultToolkit().getScreenSize().width-650;
 97                         int y1=Toolkit.getDefaultToolkit().getScreenSize().height-60;
 98                         //移动鼠标到保存按钮,并用鼠标点击
 99                         rb.mouseMove(x1, y1);
100                         rb.delay(500);
101                         pressMouse(rb, InputEvent.BUTTON1_MASK, 500);
102 
103                     
104     }
105     // 鼠标单击,要双击就连续调用   
106     private static void pressMouse(Robot r, int m, int delay) {
107         r.mousePress(m);
108         r.delay(10);
109         r.mouseRelease(m);
110         r.delay(delay);
111     }
112 
113     @After
114     public void tearDown() throws Exception {
115         System.out.println("tearDown执行");
116         //driver.quit();
117         String verificationErrorString = verificationErrors.toString();
118         if (!"".equals(verificationErrorString)) {
119             fail(verificationErrorString);
120         }
121     }
122 
123     private boolean isElementPresent(By by) {
124         try {
125             driver.findElement(by);
126             return true;
127         } catch (NoSuchElementException e) {
128             return false;
129         }
130     }
131 
132     private boolean isAlertPresent() {
133         try {
134             driver.switchTo().alert();
135             return true;
136         } catch (NoAlertPresentException e) {
137             return false;
138         }
139     }
140 
141     private String closeAlertAndGetItsText() {
142         try {
143             Alert alert = driver.switchTo().alert();
144             String alertText = alert.getText();
145             if (acceptNextAlert) {
146                 alert.accept();
147             } else {
148                 alert.dismiss();
149             }
150             return alertText;
151         } finally {
152             acceptNextAlert = true;
153         }
154     }
155 }

 

posted @ 2017-08-16 16:14  沙鸥ing  阅读(581)  评论(0)    收藏  举报