
org.phoenix.action.WebElementAction Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of phoenix_webdriver Show documentation
Show all versions of phoenix_webdriver Show documentation
update:检查点bug修复,增加js执行的驱动,commandExecutor方法bug修复,驱动更新支持最新Firefox47/chrome51/IE10/IE11/IE Edge
package org.phoenix.action;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriverService;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.phoenix.aop.CheckPointInvocationHandler;
import org.phoenix.aop.PhoenixLogger;
import org.phoenix.aop.WebApiInvocationHandler;
import org.phoenix.api.action.APIAction;
import org.phoenix.api.action.WebAPIAction;
import org.phoenix.dao.DataDao;
import org.phoenix.dao.LocatorDao;
import org.phoenix.enums.LocatorType;
import org.phoenix.model.CaseLogBean;
import org.phoenix.model.DataBean;
import org.phoenix.model.LocatorBean;
import org.phoenix.model.UnitLogBean;
import org.phoenix.utils.SystemInfo;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.ElementsCollection;
import com.codeborne.selenide.Selenide;
import com.codeborne.selenide.SelenideElement;
import com.codeborne.selenide.WebDriverRunner;
/**
* WebGUI元素的操作类
* @author mengfeiyang
*
*/
public class WebElementAction extends WebElementLocator implements ElementAction{
private LocatorBean locatorBean;
private LinkedList unitLog;
private ElementAction webProxy;
private LocatorDao locatorDao = new LocatorDao();
private DataDao dataDao = new DataDao();
private HashMap locators = new HashMap();
private HashMap datas = new HashMap();
private CaseLogBean caseLogBean;
private String ChromeDriverPath;
private String FirefoxPath;
public WebElementAction(LinkedList unitLog) {
new PhoenixLogger();
this.unitLog = unitLog;
}
/**
* 加载用例的数据和定位信息,使用用例的id
*/
public void addLocatorAndDatas(int caseId,CaseLogBean caseLogBean){
setCaseLogBean(caseLogBean);
List llist = locatorDao.getModelList(caseId);
List dlist = dataDao.getModelList(caseId);
for(LocatorBean locatorBean : llist){
locators.put(locatorBean.getLocatorDataName(), locatorBean);
}
for(DataBean dataBean : dlist){
datas.put(dataBean.getDataName(), dataBean.getDataContent());
}
}
/**
* 加载用例的数据和定位信息,使用用例的名称
*/
public void addLocatorAndDatas(String caseName,CaseLogBean caseLogBean){
setCaseLogBean(caseLogBean);
List list = locatorDao.getModelList(caseName);
List dlist = dataDao.getModelList(caseName);
for(LocatorBean locatorBean : list){
locators.put(locatorBean.getLocatorDataName(), locatorBean);
}
for(DataBean dataBean : dlist){
datas.put(dataBean.getDataName(), dataBean.getDataContent());
}
}
/**
* 添加聚合用例。根据用例的名称
* 聚合用例用于执行当前用例中嵌入的外部用例,仅支持一级调用
*/
public void addAggregateCase(String caseName){
}
/**
* 添加聚合用例。根据用例的id
* 聚合用例用于执行当前用例中嵌入的外部用例,仅支持一级调用
*/
public void addAggregateCase(int caseId){
}
public CaseLogBean getCaseLogBean() {
return caseLogBean;
}
public void setCaseLogBean(CaseLogBean caseLogBean) {
this.caseLogBean = caseLogBean;
}
public ElementAction webElement(){
return webProxy;
}
/**
* 直接使用定位信息而无需将其先录入数据库
* @param locatorData
* @param locatorType 如果为null,则默认为locatorType 为CSS。Class和id可直接作为Css定位
* @return
*/
@Override
public ElementAction webElement(String locatorData,LocatorType locatorType){
if(locatorType == null)locatorBean = new LocatorBean(locatorData);
else locatorBean = new LocatorBean(locatorData,locatorType);
return webProxy;
}
/**
* 链式查询方法,直接调用了SelenideElement,调用了此方法后,后续的操作将不会被记录日志
*/
@Override
public SelenideElement webElementLinkFinder(String locatorDataName){
LocatorBean locatorBean = locators.get(locatorDataName);
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType());
}
/**
* 链式查询方法,直接调用了SelenideElement,调用了此方法后,后续的操作将不会被记录日志
*/
@Override
public SelenideElement webElementLinkFinder(String locatorData,LocatorType locatorType){
if(locatorType == null)locatorType = LocatorType.CSS;
return WebElement(locatorData,locatorType);
}
/**
* 指定一个定位信息的标识,需要先将其录入数据库之后才会有该标识
*/
public ElementAction webElement(String name){
locatorBean = locators.get(name);
return webProxy;
}
/**
* 不使用任何定位信息时,如close方法
* @return
*/
public ElementAction getWebProxy() {
return webProxy;
}
public void setWebProxy(ElementAction webProxy) {
this.webProxy = webProxy;
}
/**
* 产生检查点代理
*/
public ICheckPoint checkPoint(){
ICheckPoint checkPoint = (ICheckPoint)new CheckPointInvocationHandler(new CheckPoint(),unitLog,caseLogBean).getProxy();
return checkPoint;
}
/**
* 产生webAPI接口代理
*/
public APIAction webAPIAction(){
APIAction webAPIAction = (APIAction) new WebApiInvocationHandler(new WebAPIAction(),unitLog,caseLogBean).getProxy();
return webAPIAction;
}
/**
* 如果将数据已经录入了数据库,则指定该数据的标识
*/
@Override
public String getData(String dataName){
return datas.get(dataName);
}
@Override
public WebDriver getCurrentDriver(){
return WebDriverRunner.getWebDriver();
}
@Override
public void openNewWindowByPhantomJs(String url){
caseLogBean.setEngineType("PhantomJsDriver");
DesiredCapabilities sCaps = new DesiredCapabilities();
sCaps.setJavascriptEnabled(true);
if(SystemInfo.isWindows()){
sCaps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, WebElementAction.class.getResource("/").getPath().replace("%20", " ")+"drivers/phantomjs.exe");
sCaps.setCapability(PhantomJSDriverService.PHANTOMJS_GHOSTDRIVER_PATH_PROPERTY, WebElementAction.class.getResource("/").getPath().replace("%20", " ")+"drivers/js/main.js");
PhoenixLogger.info("Use Driver:"+WebElementAction.class.getResource("/").getPath().replace("%20", " ")+"drivers/phantomjs.exe");
} else {
sCaps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, WebElementAction.class.getResource("/").getPath().replace("%20", " ")+"drivers/phantomjs");
PhoenixLogger.info("Use Driver:"+WebElementAction.class.getResource("/").getPath().replace("%20", " ")+"drivers/phantomjs");
}
ArrayList cliArgsCap = new ArrayList();
cliArgsCap.add("--web-security=false");
cliArgsCap.add("--ssl-protocol=any");
cliArgsCap.add("--ignore-ssl-errors=true");
sCaps.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgsCap);
sCaps.setCapability(PhantomJSDriverService.PHANTOMJS_GHOSTDRIVER_CLI_ARGS, new String[]{"--logLevel=INFO"});
WebDriverRunner.setWebDriver(new PhantomJSDriver(sCaps));
Selenide.open(url);
}
//WebElementAction.class.getResource("/").getPath().replace("%20", " ")
/**
* 此方法不适用于Linux
*/
@Override
public void openNewWindowByIE(String url){
caseLogBean.setEngineType("IEDriver");
System.setProperty("webdriver.ie.driver", WebElementAction.class.getResource("/").getPath().replace("%20", " ")+"drivers/IEDriverServer"+SystemInfo.getArch()+".exe");
WebDriverRunner.setWebDriver(new InternetExplorerDriver());
Selenide.open(url);
}
@Override
public void setChromeDriverExePath(String path){
ChromeDriverPath = path;
}
/**
* 如果打不开Chrome浏览器或或者报异常,应先使用 setChromeDriverExePath(String path)方法指定chromedriver.exe路径
* Linux环境下无需设置chrome的安装路径。建议chrome安装在默认路径下
* 该程序的路径必须和Chrome.exe在同一目录下
*/
@Override
public void openNewWindowByChrome(String url) {
caseLogBean.setEngineType("ChromeDriver");
if(SystemInfo.isWindows())System.setProperty("webdriver.chrome.driver",ChromeDriverPath);
else System.setProperty("webdriver.chrome.driver", WebElementAction.class.getResource("/").getPath().replace("%20", " ")+"drivers/chromedriver");
WebDriverRunner.setWebDriver(new ChromeDriver());
Selenide.open(url);
}
@Override
public void setFirefoxExePath(String path){
FirefoxPath = path;
}
/**
* 如果打不开Firefox浏览器或或者报异常,应先使用 setFirefoxExePath(String path)方法指定Firefox主程序路径
*/
@Override
public void openNewWindowByFirefox(String url) {
caseLogBean.setEngineType("FirefoxDriver");
if(SystemInfo.isWindows())System.setProperty("webdriver.firefox.bin", FirefoxPath);
WebDriverRunner.setWebDriver(new FirefoxDriver());
Selenide.open(url);
}
@Override
public void closeWindow() {
Selenide.close();
}
@Override
public void click(){
WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).click();
}
@Override
public String getText() {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).getText();
}
@Override
public String innerText() {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).innerText();
}
@Override
public String innerHtml() {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).innerHtml();
}
@Override
public String name() {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).name();
}
@Override
public boolean exists() {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).exists();
}
/* @Override
public SelenideElement $(String cssSelector) {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).$(cssSelector);
}
@Override
public SelenideElement $(String cssSelector, int index) {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).$(cssSelector, index);
}
@Override
public SelenideElement $(By selector) {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).$(selector);
}
@Override
public SelenideElement $(By selector, int index) {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).$(selector, index);
}
@Override
public ElementsCollection $$(String cssSelector) {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).$$(cssSelector);
}*/
/*
* 根据定位信息获取对象列表
* @see org.phoenix.action.ElementAction#getElements()
*/
@Override
public ElementsCollection getElements() {
return WebElements(locatorBean.getLocatorData(),locatorBean.getLocatorType());
}
@Override
public void selectOption(String text) {
WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).selectOption(text);
}
@Override
public void selectOptionByValue(String value) {
WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).selectOptionByValue(value);
}
@Override
public String getSelectedValue() {
String str = WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).getSelectedValue();
return str;
}
@Override
public String getSelectedText() {
String str = WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).getSelectedText();
return str;
}
@Override
public File download() throws FileNotFoundException {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).download();
}
@Override
public SelenideElement contextClick() {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).contextClick();
}
@Override
public SelenideElement hover() {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).hover();
}
@Override
public SelenideElement dragAndDropTo(String targetCssSelector) {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).dragAndDropTo(targetCssSelector);
}
@Override
public boolean isImage() {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).isImage();
}
@Override
public SelenideElement parent() {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).parent();
}
@Override
public SelenideElement waitWhile(Condition condition,
long timeoutMilliseconds) {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).waitWhile(condition, timeoutMilliseconds);
}
@Override
public boolean isDisplayed() {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).isDisplayed();
}
@Override
public void submit() {
WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).submit();
}
@Override
public void sendKeys(String str) {
WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).sendKeys(str);
}
@Override
public void clear() {
WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).clear();
}
@Override
public String getTagName() {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).getTagName();
}
@Override
public String getAttribute(String name) {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).getAttribute(name);
}
@Override
public boolean isSelected() {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).isSelected();
}
@Override
public boolean isEnabled() {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).isEnabled();
}
@Override
public String getCssValue(String propertyName) {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).getCssValue(propertyName);
}
@Override
public SelenideElement getSelectedOption() {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).getSelectedOption();
}
@Override
public SelenideElement scrollTo() {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).scrollTo();
}
@Override
public void setText(String text) {
WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).setValue(text);
}
@Override
public String getAttrValue(String attr) {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).getAttribute(attr);
}
@Override
public void sleep(long ms) {
Selenide.sleep(ms);
}
@Override
public void append(String str) {
WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).append(str);
}
@Override
public void pressEnter() {
WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).pressEnter();
}
@Override
public void pressTab() {
WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).pressTab();
}
@Override
public void setSelected(boolean selected) {
WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).setSelected(selected);
}
@Override
public void waitUntil(Condition condition, long timeoutMilliseconds) {
WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).waitUntil(condition, timeoutMilliseconds);
}
@Override
public File uploadFile(String filePath) {
return WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()).uploadFile(new File(filePath));
}
@Override
public void switchToWindow(String title) {
Selenide.switchToWindow(title);
}
@Override
public void switchToWindow(int index) {
Selenide.switchToWindow(index);
}
@Override
public void switchToFrame(String nameOrId){
WebDriverRunner.getWebDriver().switchTo().frame(nameOrId);
}
public void switchToParent(){
WebDriverRunner.getAndCheckWebDriver().switchTo().parentFrame();
}
@Override
public String getPageSource(){
return WebDriverRunner.getAndCheckWebDriver().getPageSource();
}
@Override
public String screenshot(String fileName){
return Selenide.screenshot(fileName);
}
@Override
public void back() {
Selenide.back();
}
@Override
public void forward() {
Selenide.forward();
}
@Override
public String title() {
return Selenide.title();
}
@Override
public void refresh(){
Selenide.refresh();
}
public void doubleClick(){
Selenide.actions().doubleClick(WebElement(locatorBean.getLocatorData(),locatorBean.getLocatorType()));
}
@Override
public void confirm(String expectedDialogText) {
Selenide.confirm(expectedDialogText);
}
@Override
public SelenideElement selectRadio(String value) {
return Selenide.selectRadio(by(locatorBean.getLocatorData(),locatorBean.getLocatorType()), value);
}
@Override
public SelenideElement getSelectedRadio() {
return Selenide.getSelectedRadio(by(locatorBean.getLocatorData(),locatorBean.getLocatorType()));
}
@Override
public void dismiss(String expectedDialogText) {
Selenide.dismiss(expectedDialogText);
}
@Override
public List getJavascriptErrors() {
return Selenide.getJavascriptErrors();
}
@Override
public List getWebDriverLogs(String logType, Level logLevel) {
return Selenide.getWebDriverLogs(logType, logLevel);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy