Selenium 常见API封装

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Qmen_Crow/article/details/85453481

Selenium 常见API封装

Selenium>PageBase.java

PageBase 这个作为所有page即网页的父类,主要封装了一些元素最基本操作例如:点击元素/睡眠等待/输入等常见操作;便于子类即页面直接调用封装的函数直接进行操作同时生成相关日志记录(ps:在此处Logger类是自己自定义的Log类,可以使用log4j 进行替换)

package com.hero.pages.base;

import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.UnexpectedTagNameException;
import org.openqa.selenium.support.ui.WebDriverWait;

import com.hero.utils.LogType.LogTypeName;
import com.hero.utils.Logger;
/**
 * 封装最基本ViewPage操作,生成相关日志记录
 * @author jack_qiu
 *         2017年11月13日
 */
public class PageBase {
	public static WebDriver driver;
	public static String pageTitle;
	public static String pageUrl;
	public static Alert alt;
	
	
	public PageBase(WebDriver driver) {
		PageBase.driver = driver;
	}
	/**
	 * 打开url
	 * @param url String 网址+
	 */
	protected void GotoUrl(String url){
		driver.get(url);
		Logger.Output(LogTypeName.INFO, "Go to url:" + url + ".");
	}
	/**
	 * 显示等待当前元素
	 * 判断当前元素是否visble
	 * @param element
	 * @return WebElement
	 */
	protected WebElement isElementVisble(WebElement element){
		WebDriverWait wait = new WebDriverWait(driver,60);
		return wait.until(ExpectedConditions.visibilityOf(element));
	}
	
	/**
	 * 显示等待当前元素不可见.
	 * e.g加载页面时有时会出现Loading图标导致其它元素无法操作
	 * 判断当前元素是否visble
	 * @param element
	 * @return
	 */
	public static void isElementInvisbility(By locator){
		WebDriverWait wait = new WebDriverWait(driver,30);
		wait.until(ExpectedConditions.invisibilityOfElementLocated(locator));
	}
	/*protected WebElement isElement*/
	
	/**
	 * 等待元素可以被点击
	 * @param locator
	 * @return
	 */

	protected WebElement isElementToBeClickable(WebElement element){
		WebDriverWait wait = new WebDriverWait(driver, 20);
		return wait.until(ExpectedConditions.elementToBeClickable(element));
	}
	
	/**
	 * 
	 * 减缓脚本执行速度
	 */
	public void callWait(int time){
		try {
			Thread.sleep(time);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		Logger.Output(LogTypeName.INFO, "sleep "+time+" mills . " );
	}
	
	/**
	 * 获取元素文字描述
	 * @param element 元素
	 * @return 元素text
	 */
	protected String getElementText(WebElement element){
		isElementVisble(element);
		Logger.Output(LogTypeName.INFO, "element text is :"+element.getText()+".");
		return element.getText();
	}
	
	/**
	 * 获取元素文字描述
	 * @param element 元素
	 * @return 元素value值
	 */
	protected String getElementValue(WebElement element){
		isElementVisble(element);
		Logger.Output(LogTypeName.INFO, "element text is :"+element.getAttribute("value")+".");
		return element.getAttribute("value");
	}
	
	/**
	 * 在输入框里输入字符串
	 * @param element 输入框元素
	 * @param text 所输入的字符串
	 */
	protected void type(WebElement element, String text) {
		try {
			if (element.isEnabled()) {
				element.clear();//此处clear()操作,是为了处理同时多个脚本对同一个元素输入进行处理,以防影响到下一次脚本执行结果
				Logger.Output(LogTypeName.INFO,
						"Clean the value if any in " + element.toString() + ".");
				element.sendKeys(text);
				Logger.Output(LogTypeName.INFO, "Type value is: "
						+ text + ".");
			}
		} catch (Exception e) {
			Logger.Output(LogTypeName.ERROR, e.getMessage() + "element:"+element.toString()+".");
		}

	}
	
	/**
	 * 点击元素
	 * @param element 可被点击的元素
	 */
	protected void click(WebElement element) {
		try {
			isElementToBeClickable(element);
			element.click();
			Logger.Output(LogTypeName.INFO,
					"Element: " + element.toString() + " was clicked.");
		} catch (Exception e) {
			Logger.Output(LogTypeName.ERROR, e.getMessage() + ".");
		}

	}

	/**
	 * 通过日期值/预订记录 etc进行选择操作
	 * @param value 日期值/预订记录
	 */
	public void clickByColumnValue(WebElement webTable,String value,String xpath){
		//isElementVisble(webTable);
		//Logger.Output(LogTypeName.INFO, "access clickByColumnValue method");
		try {
			WebElement element = webTable.findElement(By.xpath(xpath+"[text()='"+value+"']"));
			click(element);
		} catch (Exception e) {
			Logger.Output(LogTypeName.ERROR, e.getMessage() + ".");
		}
	}
    /**
     * 通过value值进行下拉框操作
     * @param element 下拉框元素
     * @param value 所选选项value值
     */
	protected void getSelectByValue(WebElement element,String value){
		isElementVisble(element);
		try{
			Select select = new Select(element);
			select.selectByValue(value);
			Logger.Output(LogTypeName.INFO, "select the value is:" + value +".");
		}catch(UnexpectedTagNameException e){
			Logger.Output(LogTypeName.ERROR, "element:" + element +"is not a select.");
		}
	}
	
	/**
	 * 通过文字信息进行下拉框操作
	 * @param element 下拉框元素
	 * @param text 所选项text值
	 */
	protected void getSelectByVisibleText(WebElement element,String text){
		isElementVisble(element);
		try{
			//SeleniumHelper.scrollTo(driver, element);
			/*JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
			jsExecutor.executeScript("arguments[0].scrollIntoView(true);", element);*/
			Select select = new Select(element);
			select.selectByVisibleText(text);
			Logger.Output(LogTypeName.INFO, "select the value is:" + text +".");
		}catch(UnexpectedTagNameException e){
			Logger.Output(LogTypeName.ERROR, "element:" + element +"is not a select.");
		}
	}
	//*[@id="select2-drop"]/ul/li[1]/ul/li[3]/div/text()
	protected void selectItem(WebElement selector,String select_value){
		click(selector);
		WebElement element =selector.findElement(By.xpath("//option[text()='\"+select_value+\"']"));
		click(element);
	}
	
	/**
	 * 执行js脚本代码
	 * @param jscript
	 */
	protected void execJS(String jscript){
		JavascriptExecutor js = (JavascriptExecutor) driver;
		js.executeScript(jscript);
		Logger.Output(LogTypeName.INFO, "js:" + jscript +"is execute.");
	}
	
	/**
	 * 通过js来执行下拉框选择操作
	 */
	protected void getSelectByJs(String jscript_onclick,WebElement element,String select_value){
		execJS(jscript_onclick);
		click(element.findElement(By.xpath("./li/span[text()='"+select_value+"']")));
		
	}
	
	
	/**
	 * 获取当前页面标题
	 * @return String 标题值
	 */
	public String getCurrentPageTitle() {
		Logger.Output(LogTypeName.INFO,
				"CurrpentPageTitle:" + driver.getTitle() + ".");
		return driver.getTitle();
	}
	/**
	 * 获取当前页面Url
	 * @return String url
	 */
	public String getCurrentPageUrl(){
		Logger.Output(LogTypeName.INFO,
				"CurrpentPageUrl:" + driver.getCurrentUrl() + ".");
		return driver.getCurrentUrl();
	}
	
	/*
	 * 获取alert 弹框文字内容
	 */
	public String getAlertText(){
		alt = driver.switchTo().alert();
		Logger.Output(LogTypeName.INFO,"Alert's Text is:" + alt.getText() + " .");
		return alt.getText();
	}
	
	/*
	 * alert 确定操作
	 * 此处alert是指非div alert进行操作
	 */
	public void accept(){
		alt = driver.switchTo().alert();
		Logger.Output(LogTypeName.INFO, "ok button was clicked .");
		alt.accept();
	}
	
	/*
	 * alert 取消操作
	 * 此处alert是指非div alert进行操作
	 */
	public void dismiss(){
		alt = driver.switchTo().alert();
		Logger.Output(LogTypeName.INFO, "cancel button was clicked .");
	}
}

猜你喜欢

转载自blog.csdn.net/Qmen_Crow/article/details/85453481