资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

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 waitFn = new Function() {
            @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 waitForElementVisiblelist(WebDriver driver, final By locator, long timeOutInSeconds) {
        Function> waitFn = new Function>() {
            @Override
            public List apply(WebDriver driver) {
                try {
                    List 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 waitFn = new Function() {
            @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();
    }
        }

名称栏目:selenium操作web自动化小小封装体验
文章分享:http://cdkjz.cn/article/pgsgej.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220