zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    图片360度旋转特效
    css背景图片拉伸
    圆角带箭头的提示框css实现
    CSS3/jQuery自定义弹出窗口
    EasyUI Editable Tree
    easyui datagrid自定义操作列
    jQuery EasyUI实现关闭全部tabs
    easyui获取当前点击对象tabs的title
    jQuery easyui刷新当前tabs
    EasyUI项目学习
  • 原文地址:https://www.cnblogs.com/7047-zfy/p/7373921.html
Copyright © 2011-2022 走看看