常见封装的方法:输入、点击、判断元素是否存在、根据句柄切换窗口、根据title切换窗口、滚动窗口、截图

import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.Set;

import javax.imageio.ImageIO;

import org.apache.commons.io.FileUtils;
import org.eclipse.jetty.util.thread.Timeout;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.NoSuchWindowException;
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 Study.Day02.TestTabnumDetail;

public class CommonClass {
//封装元素输入的方法
public static int t = 1;
static String dir="F:\\Users\\Wangtest\\screenshots\\dianzhang";
public static void sendKeys(WebDriver driver,By by, String value){

driver.findElement(by).sendKeys(value);

}

//封装元素点击的方法
public static void click(WebDriver driver,By by){

driver.findElement(by).click();

}

//封装判断元素是否存在的方法
public boolean doesWebElementExist(WebDriver driver,By by){

try {
driver.findElement(by);
return false;
} catch (Exception e) {
// TODO: handle exception
return true;
}
}

//封装根据句柄切换窗口的方法
public String getWindowHandle(WebDriver driver){

String currentWindow = driver.getWindowHandle();

return currentWindow;

}

public static void SwitchNewwindow(WebDriver driver){
//得到当前句柄

String currentWindow = driver.getWindowHandle();

//得到所有窗口的句柄

Set<String> handles = driver.getWindowHandles();

//排除当前窗口的句柄,则剩下是新窗口

Iterator<String> it = handles.iterator();

while(it.hasNext()){

if(currentWindow == it.next()) continue;

driver.switchTo().window(it.next());

}

}

//封装通过title切换窗口
public boolean switchToWindow(WebDriver driver,String windowTitle){
boolean flag = false;
try {
String currentHandle = driver.getWindowHandle();
Set<String> handles = driver.getWindowHandles();
for (String s : handles) {
if (s.equals(currentHandle))
continue;
else {
driver.switchTo().window(s);
if (driver.getTitle().contains(windowTitle)) {
flag = true;
System.out.println("Switch to window: " + windowTitle + " successfully!");
break; }
else
continue;
}
}
} catch (NoSuchWindowException e) {
System.out.printf("Window:" + windowTitle+ " cound not found!", e.fillInStackTrace());
flag = false;
}
return flag;
}

//将滚动条滚到适合的位置
public static void setScroll(WebDriver driver,int height){
try {

// String setscroll = "document.documentElement.scrollTop=" + height;
String setscroll = "document.body.scrollTop=" + height;
JavascriptExecutor jse=(JavascriptExecutor) driver;
jse.executeScript(setscroll);

} catch (Exception e) {
System.out.println("Fail to set the scroll.");
}
}
// public void TakeScreenShot(WebDriver driver,WebElement element) throws IOException {
// File screen = ((TakesScreenshot) ]this.driver).getScreenshotAs(OutputType.FILE);
//
// Point p = element.getLocation();
//
// int width = element.getSize().getWidth();
// int height = element.getSize().getHeight();
//
// Rectangle rect = new Rectangle(width, height);
//
// BufferedImage img = null;
//
// img = ImageIO.read(screen);
//
// BufferedImage dest = img.getSubimage(p.getX(), p.getY(), rect.width,
// rect.height);
//
// ImageIO.write(dest, "png", screen);
//
// File f = null;
//
// f = new File(dir+getDateTime()+"_"+t+".jpg");
//
// FileUtils.copyFile(screen, f);
//
// }

//获取当前时间
public static String getDateTime(){
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd_HHmmss");
return df.format(new Date());
}

//封装截图的方法
public static void ScreenShot(WebDriver driver){
File screenShot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
try {
FileUtils.copyFile(screenShot, new File(dir+getDateTime()+"_"+t+".jpg"));
++t;
} catch (IOException e) {
e.printStackTrace();
}
}

}

Selenium应用代码(常见封装的方法一)的更多相关文章

  1. Selenium应用代码(常见封装的方法二)

    滚动窗口: //将滚动条滚到适合的位置 , 方法一 public static void setScroll(WebDriver driver,int height){ try { // String ...

  2. Selenium示例集锦--常见元素识别方法、下拉框、文本域及富文本框、鼠标操作、一组元素定位、弹窗、多窗口处理、JS、frame、文件上传和下载

    元素定位及其他操作 0.常见的识别元素的方法是什么? driver.find_element_by_id() driver.find_element_by_name() driver.find_ele ...

  3. [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)

    转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...

  4. vue-axios的总结及项目中的常见封装方法。

    前言 我们知道 vue 2.0版本开始推荐使用 axios 来完成前端 ajax 请求,axios 是一个基于Promise 的 http 库,可以用在浏览器和 node.js 中,axios 成为v ...

  5. Selenium_用selenium webdriver实现selenium RC中的类似的方法

    最近想总结一下学习selenium webdriver的情况,于是就想用selenium webdriver里面的方法来实现selenium RC中操作的一些方法.目前封装了一个ActionDrive ...

  6. iOS开发学习--纯代码 UIScrollView 无限循环的实现——代码类封装

    一个简单的利用UIScrollView 实现的无线滚动banner,下面的代码实现,因为封装问题,对两个及一下的view 支持出了一点问题(view是传参进来的,不可以生成两份),但是原理是正确的,智 ...

  7. Visual Studio快速封装字段方法

    在面向对象的编程中我们常常要将各个字段封装为属性,但是当字段多的时候往往这个重复的操作会大大降低我们的开发效率,那么如何才能快速的封装字段呢?下面就给大家2个解决方法: 1.使用封装字段方法: 选中字 ...

  8. C# 加密总结 一些常见的加密方法

    C# 加密总结 一些常见的加密方法 一 散列数据 代码如下: ? private static string CalculateSHA512Hash(string input)         {   ...

  9. JavaScript基础:BOM的常见内置方法和内置对象

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. BOM的介绍 JavaScript的组成 JavaScript基础分为三 ...

随机推荐

  1. ODBC, OLEDB, ADO, ADO.NET

    在SSIS中,选择Connction Manager时,有很多的类型.其中会发现如下4个连接类型ODBC, OLEDB, ADO, ADO.NET.这4个东东到底是什么,他们有什么关联,什么区别,如何 ...

  2. java--集合框架总结1--set总结

    一.集合框架的概述. 基础的数据结构有数组,链表,栈,队列,二叉树等,java中的数据结构,利用了这些基本的数据结构分别实现了很丰富的集合框架类型,下面简单地总结下关于java集合框架的基础内容,在进 ...

  3. 宏定义中的反斜杠"\"和宏定义的细节说明

    转载自:http://www.wtoutiao.com/p/K6csca.html 在阅读C语言代码经常可以看到代码中出现反斜杠"\",不是很明白它的意思,遂对反斜杠"\ ...

  4. Alice's Print Service

    Alice's Print Service Time Limit: 2 Seconds      Memory Limit: 65536 KB Alice is providing print ser ...

  5. Spring课程 Spring入门篇 6-3 ProxyFactoryBean及相关内容(下)

    1 解析 1.1 使用global advisors demo 1.2 jdk代理和cglib代理的选择 1.3 如何强制使用CGLIB实现AOP? 1.4 JDK动态代理和CGLIB字节码生成的区别 ...

  6. nexus3安装

    windows环境 1.下载nexus3 2.以管理员的方式打开命令行,建议打开服务管理界面,将这个服务设置为手动,步骤是:右键我的电脑-->服务-->nexus,然后点击设置手动启动 3 ...

  7. PAT 1038. Recover the Smallest Number

    #include <iostream> #include <cstdlib> #include <vector> #include <algorithm> ...

  8. NOI.AC NOIP模拟赛R3解题报告

    心路历程 预计得分:\(100+100+50=250\) 实际得分:\(10 +100 +50 = 160\) 三道原题,真好.T2做过,T1写了个错误思路,T3写了写50分状压dp. 整场考试实际在 ...

  9. package.json中版本理解

    一个完整的版本号可以理解为: [主要版本号,次要版本号,补丁版本号]版本号 x.y.z :其中z 表示一些小的bugfix, y表示一些大的版本更改,比如一些API的变化x表示一些设计的变动及模块的重 ...

  10. 03_Adaptive注解

    [Adaptive注解] package com.alibaba.dubbo.common.extension; import com.alibaba.dubbo.common.URL; import ...