package org.sky.auto.window;
//import java.awt.Toolkit;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
//import org.openqa.selenium.Dimension;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.Point;
import org.openqa.selenium.TakesScreenshot;
//import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.sky.auto.base.AutoBase;
import org.sky.auto.base.ConfigParser;
import org.sky.auto.driver.Browser;
import org.sky.auto.element.SElement;
import org.sky.auto.proxy.ProxyRunnerListener;
/**这个类把AutoBase解放出来,单独的定义为Window类,里面封装的都是浏览器自身的一些基本操作。比较全的方法
* @author 王天庆
* */
public class Window {
private static Set<String> windowHandles =new HashSet<String>();
/**通过title来选择页面*/
public static void selectWindowByTitle(String title){
ProxyRunnerListener.getDispatcher().beforeselectWindow();
Set<String> windows = AutoBase.driver().getWindowHandles();
for(String window : windows){
AutoBase.driver().switchTo().window(window);
String titleName = AutoBase.driver().getTitle();
if(titleName.equals(title)){
break;
}
}
ProxyRunnerListener.getDispatcher().afterselectWindow();
}
/**通过title的一部分来选择window页面*/
public static void selectWindowContainTitle(String title){
ProxyRunnerListener.getDispatcher().beforeselectWindow();
Set<String> windows = AutoBase.driver().getWindowHandles();
for(String window : windows){
AutoBase.driver().switchTo().window(window);
String titleName = AutoBase.driver().getTitle();
if(titleName.contains(title)){
break;
}
}
ProxyRunnerListener.getDispatcher().beforeselectWindow();
}
public static void selectWindowByUrl(String url){
ProxyRunnerListener.getDispatcher().beforeselectWindow();
Set<String> windows = AutoBase.driver().getWindowHandles();
for(String window : windows){
AutoBase.driver().switchTo().window(window);
String titleName = AutoBase.driver().getCurrentUrl();
if(titleName.equals(url)){
break;
}
}
ProxyRunnerListener.getDispatcher().afterselectWindow();
}
/**通过url的一部分来选择window页面*/
public static void selectWindowContainUrl(String url){
ProxyRunnerListener.getDispatcher().beforeselectWindow();
Set<String> windows = AutoBase.driver().getWindowHandles();
for(String window : windows){
AutoBase.driver().switchTo().window(window);
String titleName = AutoBase.driver().getCurrentUrl();
if(titleName.contains(url)){
break;
}
}
ProxyRunnerListener.getDispatcher().afterselectWindow();
}
/**进入frame*/
public static void selectFrame(By selector){
AutoBase.driver().switchTo().frame(AutoBase.driver().findElement(selector));
}
/**进入frame*/
public static void selectFrameByName(String name){
AutoBase.driver().switchTo().frame(name);
}
/**返回默认的window下*/
public static void selectDefaultWindow(){
AutoBase.driver().switchTo().defaultContent();
}
/**进入frame里面*/
public static void selectFrame(WebElement element){
AutoBase.driver().switchTo().frame(element);
}
public static void selectFrame(SElement element){
AutoBase.driver().switchTo().frame(element.getElement());
}
/**执行js*/
public static void runJS(String js){
ProxyRunnerListener.getDispatcher().beforerunJS();
((JavascriptExecutor)AutoBase.driver()).executeScript(js);
ProxyRunnerListener.getDispatcher().afterrunJS();
}
/**执行带有参数的js*/
public static void runJs(String js, Object... o){
ProxyRunnerListener.getDispatcher().beforerunJS();
((JavascriptExecutor)AutoBase.driver()).executeScript(js, o);
ProxyRunnerListener.getDispatcher().afterrunJS();
}
/**关闭所有的窗口*/
public static void closeAllWindows(){
ProxyRunnerListener.getDispatcher().beforecloseAllWindows();
AutoBase.driver().quit();
ProxyRunnerListener.getDispatcher().aftercloseAllWindows();
}
/**关闭当前窗口*/
public static void closeCurrentWindow(){
ProxyRunnerListener.getDispatcher().beforecloseCurrentWindow();
AutoBase.driver().close();
ProxyRunnerListener.getDispatcher().aftercloseCurrentWindow();
}
/**滚动到指定的元素的位置*/
public static void scrollTo(WebElement element){
ProxyRunnerListener.getDispatcher().beforescrollTo();
Point point = element.getLocation();
int x =point.getX();
int y =point.getY();
((JavascriptExecutor)AutoBase.driver()).executeScript("window.scrollTo("+x+","+y+")");
ProxyRunnerListener.getDispatcher().afterscrollTo();
}
/**最大化窗口*/
public static void maxWindow(){
// int screenX=Toolkit.getDefaultToolkit().getScreenSize().width;
// int screenY=Toolkit.getDefaultToolkit().getScreenSize().height;
// //最大化浏览器的实现代码
// ((WebDriver)AutoBase.driver()).manage().window().setSize(new Dimension(screenX,screenY));
ProxyRunnerListener.getDispatcher().beforemaxWindow();
AutoBase.driver().manage().window().maximize();
ProxyRunnerListener.getDispatcher().aftermaxWindow();
}
/**页面刷新*/
public static void refresh(){
ProxyRunnerListener.getDispatcher().beforerefresh();
AutoBase.driver().navigate().refresh();
ProxyRunnerListener.getDispatcher().afterrefresh();
}
/**浏览器后退*/
public static void forward(){
ProxyRunnerListener.getDispatcher().beforeforward();
AutoBase.driver().navigate().forward();
ProxyRunnerListener.getDispatcher().afterforward();
}
/**浏览器前进*/
public static void back(){
ProxyRunnerListener.getDispatcher().beforeback();
AutoBase.driver().navigate().back();
ProxyRunnerListener.getDispatcher().afterback();
}
/**得到当前窗口下的title*/
public static String getTitle(){
return AutoBase.driver().getTitle();
}
/**截屏操作,将当前页面的截屏放在指定的目录下*/
public static void takeScreenShot(){
ProxyRunnerListener.getDispatcher().beforetakeScreenShot();
String path = ConfigParser.getScreenShotPath();
TakesScreenshot tss = (TakesScreenshot)AutoBase.driver();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd-HHmmss");
String time = sdf.format(new Date());
File file = tss.getScreenshotAs(OutputType.FILE);
try {
FileUtils.copyFile(file, new File(path+File.separator+time+"png"));
} catch (IOException e) {
e.printStackTrace();
}
ProxyRunnerListener.getDispatcher().aftertakeScreenShot();
}
/**处理alert窗口*/
public static String dealAlert() {
ProxyRunnerListener.getDispatcher().beforedealAlert();
String alertMessage=null;
try{
Alert alert=AutoBase.driver().switchTo().alert();
alertMessage= alert.getText();
alert.accept();
ProxyRunnerListener.getDispatcher().afterdealAlert();
return alertMessage;
}catch (Exception e) {
System.out.println("没有找到Alert窗口!");
}
return null;
}
/**处理Prompt窗口*/
public static String dealPrompt(String input,boolean isYes) {
String promptMessage=null;
try{
Alert alert=AutoBase.driver().switchTo().alert();
alert.sendKeys(input);
promptMessage= alert.getText();
if(isYes)
alert.accept();
else
alert.dismiss();
return promptMessage;
}catch (Exception e) {
System.out.println("没有找到Prompt窗口!");
}return null;
}
/**处理confirm窗口*/
public static String dealConfirm(boolean isYes) {
ProxyRunnerListener.getDispatcher().beforedealConfirm();
String confirmMessage=null;
try{
Alert alert=AutoBase.driver().switchTo().alert();
confirmMessage=alert.getText();
if(isYes)alert.accept();
else alert.dismiss();
alert.accept();
ProxyRunnerListener.getDispatcher().afterdealConfirm();
return confirmMessage;
}catch (Exception e) {
System.out.println("没有找到Prompt窗口!");
}return null;
}
/**初始化窗口,指定浏览器*/
public static void open(Browser browser,String url){
// ProxyRunnerListener.getDispatcher().beforeOpen();
AutoBase.open(browser, url);
// ProxyRunnerListener.getDispatcher().afterOpen();
}
/**跳转页面到某个链接*/
public static void open(String url){
// ProxyRunnerListener.getDispatcher().beforeOpen();
AutoBase.open(url);
// ProxyRunnerListener.getDispatcher().afterOpen();
}
public static void scrollTo(SElement element){
ProxyRunnerListener.getDispatcher().beforescrollTo();
scrollTo(element.getElement());
ProxyRunnerListener.getDispatcher().afterscrollTo();
}
public static String getUrl(){
return AutoBase.driver().getCurrentUrl();
}
/**更新当前所有的窗口集合*/
public static void updateWindow(){
windowHandles=AutoBase.driver().getWindowHandles();
}
/**切换到最新打开的窗口*/
public static void selectNewWindow(){
for(String window:AutoBase.driver().getWindowHandles()){
int i=0;
for(String wh:windowHandles){
if(wh.equals(window)){
i++;
}
}
if(i==0){
AutoBase.driver().switchTo().window(window);
break;
}
}
}
/**清空句柄集合*/
public static void clearWindowHandle(){
windowHandles.clear();
}
}