selenium操作web自动化小小封装体验

元素判断封装


import lombok.extern.log4j.Log4j;
import org.openqa.selenium.By;
import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;

/**
 * @author liwen
 * 用来读取配置文件
 */
@Log4j
public class ObjectMap {

    private static Properties properties = null;

    public  ObjectMap(String filename) {
        properties = new Properties();
        try {
            FileInputStream in = new FileInputStream((filename));
            properties.load(in);
            in.close();
        } catch (Exception e) {
            System.out.println("找不到文件:" + filename);
            e.printStackTrace();
        }
    }

    /**
     * 处理元素定位
     *
     * @param name
     * @return
     * @throws Exception
     */
    public  By getLocateor(String name) throws Exception {
        String locator = ObjectMap.properties.getProperty(name);
        String locatortype = locator.split(">>")[0].toLowerCase();
        String locatorvalue = locator.split(">>")[1];
        locatorvalue = new String(locatorvalue.getBytes("ISO-8859-1"), "UTF-8");
        if ("cssselector".equals(locatortype)) {
            return By.cssSelector(locatorvalue);
        } else if ("id".equals(locatortype)) {
            return By.id(locatorvalue);
        } else if ("name".equals(locatortype)) {
            return By.name(locatorvalue);
        } else if ("classname".equals(locatortype)) {
            return By.className(locatorvalue);
        } else if ("tagname".equals(locatortype)) {
            return By.tagName(locatorvalue);
        } else if ("linktext".equals(locatortype)) {
            return By.linkText(locatorvalue);
        } else if ("parialllinktest".equals(locatortype)) {
            return By.partialLinkText(locatorvalue);
        } else if ("xpath".equals(locatortype)) {
            return By.xpath(locatorvalue);
        } else {
            throw new Exception("该元素没有找到");
        }
    }
}

元素文件

cn.index.signinBtn=id>>kw
cn.index.cart=id>>su
jd.closeBtn=id>>closeBtn
jd.input=xpath>>//*[@id="search-box-app"]/div/div[1]/input
jd.search=xpath>>//*[@id="search-box-app"]/div/div[1]/button/i

简单操作封装


//封装键盘操作的方法
public class KeyBoardUtil {
    //按Ctrl+F5
    public static void refresh(WebDriver driver)
    {
        Actions ctrl=new Actions(driver);
        ctrl.keyDown(Keys.CONTROL).perform();
        try{
            pressKeyEvent(KeyEvent.VK_F5);
        }catch (AWTException e)
        {
            e.printStackTrace();
        }
        ctrl.keyUp(Keys.CONTROL).perform();
    }
    //按物理键
    public static void pressKeyEvent(int keycode) throws AWTException{
        Robot robot=new Robot();
        //robot.keyPress(KeyEvent.VK_ENTER);
        robot.keyPress(keycode);
    }
    //鼠标左键按下和释放
    public static void MouseClickAndRelease(WebDriver driver){
        Actions action=new Actions(driver);
        action.clickAndHold().perform();
        try{
            Thread.sleep(1000);
        }catch (Exception e)
        {
            e.printStackTrace();
        }
        action.release().perform();
        try{
            Thread.sleep(1000);
        }catch (Exception e)
        {
            e.printStackTrace();
        }

    }

    // 鼠标悬浮
    public static void perform(WebDriver driver,WebElement element) {
        Actions action = new Actions(driver);
        action.moveToElement(element).perform();

    }

智能等待封装


import com.google.common.base.Function;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.util.List;

/**封装各种等待方法*/
public class WaitUtil {

    //显示等待多少秒
    public static void sleep(long seconds) {
        try {
            Thread.sleep(seconds);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //显示等待页面标题是否出现了某个关键字
    public static void waitWebElementTitle(WebDriver driver, String title) {
        WebDriverWait wait = new WebDriverWait(driver, 10);
        wait.until((ExpectedConditions.titleContains(title)));

    }

    //显示等待页面元素的出现
    public static void waitWebElement(WebDriver driver, By by) {
        WebDriverWait wait = new WebDriverWait(driver, 10);
        wait.until(ExpectedConditions.presenceOfElementLocated(by));

    }

    //自定义等待某个元素显示
    public static WebElement waitForElementVisible(WebDriver driver, final By locator, long timeOutInSeconds) {
        Function<WebDriver, WebElement> waitFn = new Function<WebDriver, WebElement>() {
            @Override
            public WebElement apply(WebDriver driver) {
                try {
                    WebElement element = driver.findElement(locator);
                    if (!element.isDisplayed()) {
                        KeyBoardUtil.refresh(driver);
                        WaitUtil.sleep(1000);
                    }
                    if (element.isDisplayed()) {
                        return element;
                    }
                } catch (Exception e) {
                    return null;
                }
                return null;
            }
        };
        WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
        return wait.until(waitFn);
    }

    //自定义某个元素列表是否出现
    public static List<WebElement> waitForElementVisiblelist(WebDriver driver, final By locator, long timeOutInSeconds) {
        Function<WebDriver, List<WebElement>> waitFn = new Function<WebDriver, List<WebElement>>() {
            @Override
            public List<WebElement> apply(WebDriver driver) {
                try {
                    List<WebElement> elementList = driver.findElements(locator);
                    if (elementList.isEmpty()) {
                        KeyBoardUtil.refresh(driver);
                        WaitUtil.sleep(1000);
                    }
                    if (!elementList.isEmpty()) {
                        return elementList;
                    }
                } catch (Exception e) {
                    return null;
                }
                return null;
            }
        };
        WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
        return wait.until(waitFn);
    }

    public static Boolean waitForElementPresent(WebDriver driver, final By locator, long timeOutInSeconds) {
        Function<WebDriver, Boolean> waitFn = new Function<WebDriver, Boolean>() {
            @Override
            public Boolean apply(WebDriver driver) {
                try {
                    WebElement element = driver.findElement(locator);
                    if (!element.isDisplayed()) {
                        KeyBoardUtil.refresh(driver);
                        WaitUtil.sleep(1000);
                    }
                    if (element.isDisplayed()) {
                        return true;
                    }
                } catch (Exception e) {
                    return false;
                }
                return false;
            }
        };
        WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
        return wait.until(waitFn);
    }

断言封装

测试对象封装

import jdth.pcautomation.util.ObjectMap;
import jdth.pcautomation.util.WaitUtil;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;

/**
 * @author liwen
 * @Title: thop
 * @Description:
 * @date 2019/6/18 / 19:45
 */
public class TopTh {

    public TopTh() {
        objectMap = new ObjectMap("e:\\test\\loginIndex.properties");
    }

    private WebElement element = null;
    private ObjectMap objectMap;

    public WebElement getSiginBtn(WebDriver driver) throws Exception {
        WaitUtil.waitWebElement(driver, objectMap.getLocateor("cn.index.signinBtn"));
        element = driver.findElement(objectMap.getLocateor("cn.index.signinBtn"));
        return element;
    }

    public WebElement getSiginkw(WebDriver driver) throws Exception {
        WaitUtil.waitWebElement(driver, objectMap.getLocateor("cn.index.cart"));
        element = driver.findElement(objectMap.getLocateor("cn.index.cart"));
        return element;
    }
}

测试运行

import lombok.extern.log4j.Log4j;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

/**
 * @author liwen
 * @Title: PcAoutTest
 * @Description: PC自动化 dome
 * @date 2019/6/18 / 14:10
 */
@Log4j
public class PcAoutTest {

    public String url = "https://www.baidu.com/";
    WebDriver driver = null;

    @BeforeClass
    public WebDriver init() {
        //IE启动程序路径
        System.setProperty("webdriver.chrome.driver", "D:\\javaspaces\\driver\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        return driver;
    }

    @Test

    public void getbaidu() throws Exception {
//        WebDriver driver = new ChromeDriver();
        driver.get(url);
        log.info("调试");
        new TopTh().getSiginBtn(driver).sendKeys("测试");
        new TopTh().getSiginkw(driver).click();
        Thread.sleep(2000);
//        driver.quit();
    }
        }

原文地址:https://blog.51cto.com/357712148/2411718

时间: 2024-11-06 18:31:41

selenium操作web自动化小小封装体验的相关文章

【Selenium02篇】python+selenium实现Web自动化:鼠标操作和键盘操作!

一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第二篇博文 二.Selenium第一篇博文地址: [Selenium01篇]python+selenium实现Web自动化:搭建环境,Selenium原理,定位元素以及浏览器常规操作! 三.Selenium之鼠标操作和键盘操作 1.鼠标事件 在webdriver中,鼠标操作的方法封装在 ActionChai

基于Selenium的web自动化框架

1 什么是selenium Selenium 是一个基于浏览器的自动化工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.Selenium WebDriver 和Selenium Grid: Selenium IDE:Firefox的一个扩展,它可以进行录制回放,并可以把录制的操作以多种语言(例如java,python等)的形式导出成测试用例. Selenium WebDriver:提供Web自动化所需的API,主要用作浏览

Appium appium+Android+selenium+python web 自动化 / 手机自动化 [分享] (windows)

前期准备 1.windows操作系统2.python3.53.selenium4.chrome浏览器5.chrome浏览器驱动6.pycharm7.appium8.JDK9.SDK10.安卓模拟器(genymotion)或真机11.任意apk12.使用安卓模拟器genymotion需要virtual box(个别的会补充,软件版本自己随意) 一.知识补充(1) Appium介绍 Appium是一个开源.跨平台的测试框架,可以用来测试原生及混合的移动端应用.Appium支持iOS.Android及

Web自动化常用方法封装(不定时更新)

1.对于可能因某些原因延迟出现的浏览器Alert弹窗的点击操作 public void waitAlertClick(){ WebDriverWait wait = new WebDriverWait(driver, 10);//最长10s try { Alert alert = wait.until(new ExpectedCondition<Alert>() { @Override public Alert apply(WebDriver driver1) { try { return d

Web自动化遇到shadowDOM节点操作

近期有同学在做web自动化的时候,发现页面上有些元素,在selenium中无法通过xpath来定位,各种原因找了半天,都没找到解决方案. 最后发现元素在一个叫做shadow-root的节点下面. 如下所示: 问题:shadow-root是什么?为什么下面的节点在selenium无法通过xapth来定位? 接下来我们来先了解一下shawod-root到到底是什么! 一shadowDOM介绍 上面所看到的shadow-root标签其实就是一个shadowDOM,那么什么是shadowDOM呢? 它是

Selenium Web 自动化 - Selenium常用API

Selenium Web 自动化 - Selenium常用API 2016-08-01 1 WebElement相关方法2 iFrame的处理3 操作下拉选择框4 处理Alert5 处理浏览器弹出的新窗口6 执行JS脚本7 等待元素加载8 模拟键盘操作9 设置浏览器窗口大小10 上传文件11 Selenium处理HTML5 1 WebElement相关方法 Method   Summary void clear() If   this element is a text entry elemen

Selenium Web 自动化 - 如何找到元素

Selenium Web 自动化 - 如何找到元素 2016-07-29 1. 什么是元素? 元素:http://www.w3school.com.cn/html/html_elements.asp 2. 定位方式解析 Selenium WebDriver 提供一个先进的技术来定位 web 页面元素.Selenium 功能丰富的API 提供了多个定位策略如:Name.ID.CSS 选择器.XPath 等等,如下图所示: 一般会用ID来定位,因为它是唯一的,xpath也比较通用,火狐浏览器插件:f

Python+selenium+eclipse执行web自动化(三)浏览器frame及element定位

WEB页面上frame及element定位,需要先了解页面HTML结构,如下图所示: 在Firefox或者IE中按F12按键调用开发人员工具,在HTML界面可以看到页面的大体结构(也可参考http://wenku.baidu.com/view/f7f7514e763231126edb117a.html?re=view学习更多HTML内容).首先是HTML底层,然后是head头文件和body主体文件.在此界面可使用箭头图形按钮来快速获取某个控件的对应信息,如所在frame的名称.控件的名称.ID等

WEB自动化(Python+selenium)的API

在做Web自动化过程中,汇总了Python+selenium的API相关方法,给公司里的同事做了第二次培训,分享给大家                                                                                                                     WEB自动化测试培训2 课程目的 一.Webdriver API 的使用 课程内容 1    控制浏览器 Selenium 主要提供的是操作页面上各