Browse Source
* add ui-test * add e2e license and notice * e2e delete dolphinscheduler parent project dependency * pom.xml delete e2e dependency Co-authored-by: chenxingchun <50446296+chenxingchun@users.noreply.github.com>pull/2/head
xingchun-chen
5 years ago
committed by
GitHub
33 changed files with 2148 additions and 3 deletions
@ -0,0 +1,137 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" |
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
<modelVersion>4.0.0</modelVersion> |
||||
<groupId>org.apache.dolphinscheduler-e2e</groupId> |
||||
<artifactId>dolphinscheduler-e2e</artifactId> |
||||
<version>1.0.0</version> |
||||
|
||||
<properties> |
||||
<testng.version>6.14.3</testng.version> |
||||
<selenium.version>3.141.59</selenium.version> |
||||
<guava.version>22.0</guava.version> |
||||
<commons-io.version>2.6</commons-io.version> |
||||
<reportng.version>1.1.4</reportng.version> |
||||
<commons-pool2.version>2.8.0</commons-pool2.version> |
||||
<inject.version>4.2.1</inject.version> |
||||
<xml.file>testng.xml</xml.file> |
||||
</properties> |
||||
|
||||
<dependencies> |
||||
<!-- selenium --> |
||||
<dependency> |
||||
<groupId>org.seleniumhq.selenium</groupId> |
||||
<artifactId>selenium-java</artifactId> |
||||
<version>${selenium.version}</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>com.google.guava</groupId> |
||||
<artifactId>guava</artifactId> |
||||
<version>${guava.version}</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>com.google.inject</groupId> |
||||
<artifactId>guice</artifactId> |
||||
<version>${inject.version}</version> |
||||
</dependency> |
||||
<!-- testng --> |
||||
<dependency> |
||||
<groupId>org.testng</groupId> |
||||
<artifactId>testng</artifactId> |
||||
<version>${testng.version}</version> |
||||
</dependency> |
||||
<!-- Depends on reportNg, associated with testNg--> |
||||
<dependency> |
||||
<groupId>org.uncommons</groupId> |
||||
<artifactId>reportng</artifactId> |
||||
<version>${reportng.version}</version> |
||||
<scope>test</scope> |
||||
<exclusions> |
||||
<exclusion> |
||||
<groupId>org.testng</groupId> |
||||
<artifactId>testng</artifactId> |
||||
</exclusion> |
||||
</exclusions> |
||||
</dependency> |
||||
|
||||
<dependency> |
||||
<groupId>commons-io</groupId> |
||||
<artifactId>commons-io</artifactId> |
||||
<version>${commons-io.version}</version> |
||||
</dependency> |
||||
|
||||
<dependency> |
||||
<groupId>org.apache.servicemix.bundles</groupId> |
||||
<artifactId>org.apache.servicemix.bundles.jedis</artifactId> |
||||
<version>2.6.0_2-SNAPSHOT</version> |
||||
</dependency> |
||||
<dependency> |
||||
<groupId>org.apache.commons</groupId> |
||||
<artifactId>commons-pool2</artifactId> |
||||
<version>${commons-pool2.version}</version> |
||||
</dependency> |
||||
</dependencies> |
||||
|
||||
<build> |
||||
<plugins> |
||||
<plugin> |
||||
<groupId>org.apache.maven.plugins</groupId> |
||||
<artifactId>maven-compiler-plugin</artifactId> |
||||
<version>3.8.0</version> |
||||
<configuration> |
||||
<source>1.8</source> |
||||
<target>1.8</target> |
||||
<encoding>UTF-8</encoding> |
||||
</configuration> |
||||
</plugin> |
||||
|
||||
<plugin> |
||||
<groupId>org.apache.maven.plugins</groupId> |
||||
<artifactId>maven-surefire-plugin</artifactId> |
||||
<version>2.20.1</version> |
||||
<configuration> |
||||
<suiteXmlFiles> |
||||
<suiteXmlFile>${xml.file}</suiteXmlFile> |
||||
</suiteXmlFiles> |
||||
<argLine>-Dfile.encoding=UTF-8</argLine> |
||||
<properties> |
||||
<property> |
||||
<name>usedefaultlisteners</name> |
||||
<!--Set listen false, Do not use the default report testng, use reportng--> |
||||
<value>false</value> |
||||
</property> |
||||
<property> |
||||
<name>listener</name> |
||||
<value>org.uncommons.reportng.HTMLReporter,org.uncommons.reportng.JUnitXMLReporter</value> |
||||
</property> |
||||
</properties> |
||||
<!--<workingDirectory>target/</workingDirectory>--> |
||||
<!--<forkMode>always</forkMode>--> |
||||
</configuration> |
||||
</plugin> |
||||
|
||||
|
||||
<!--<plugin>--> |
||||
<!--<groupId>org.apache.maven.plugins</groupId>--> |
||||
<!--<artifactId>maven-surefire-plugin</artifactId>--> |
||||
<!--<version>2.5</version>--> |
||||
<!--<configuration>--> |
||||
<!--<properties>--> |
||||
<!--<property>--> |
||||
<!--<name>usedefaultlisteners</name>--> |
||||
<!--<!–Set listen false, Do not use the default report testng, use reportng–>--> |
||||
<!--<value>false</value>--> |
||||
<!--</property>--> |
||||
<!--<property>--> |
||||
<!--<name>listener</name>--> |
||||
<!--<value>org.uncommons.reportng.HTMLReporter,org.uncommons.reportng.JUnitXMLReporter</value>--> |
||||
<!--</property>--> |
||||
<!--</properties>--> |
||||
<!--<workingDirectory>target/</workingDirectory>--> |
||||
<!--<forkMode>always</forkMode>--> |
||||
<!--</configuration>--> |
||||
<!--</plugin>--> |
||||
</plugins> |
||||
</build> |
||||
</project> |
@ -0,0 +1,37 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.constant; |
||||
|
||||
public class TestConstant { |
||||
/** |
||||
* 1000 |
||||
*/ |
||||
public static final int ONE_THOUSANG = 1000; |
||||
|
||||
|
||||
|
||||
/** |
||||
* 3000 |
||||
*/ |
||||
public static final int THREE_THOUSANG = 3000; |
||||
|
||||
/** |
||||
* 10000 |
||||
*/ |
||||
public static final int TEN_THOUSANG = 10000; |
||||
|
||||
} |
@ -0,0 +1,49 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.util; |
||||
|
||||
import java.io.*; |
||||
import java.util.Properties; |
||||
|
||||
/** |
||||
* read properties |
||||
*/ |
||||
public class PropertiesReader { |
||||
private static Properties properties = new Properties(); |
||||
|
||||
/** |
||||
* @param propertiesPath properties path |
||||
* @return Properties |
||||
* @throws IOException IOException |
||||
*/ |
||||
public static Properties readProperties(String propertiesPath) throws IOException { |
||||
System.out.println("read properties "); |
||||
InputStream inputStream = new FileInputStream(propertiesPath); |
||||
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8"); |
||||
BufferedReader bufferedReader = new BufferedReader(inputStreamReader); |
||||
properties.load(bufferedReader); |
||||
return properties; |
||||
} |
||||
|
||||
/*** |
||||
* @param key key |
||||
* @return value |
||||
*/ |
||||
public static String getKey(String key) { |
||||
return properties.getProperty(key); |
||||
} |
||||
} |
@ -0,0 +1,204 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.util; |
||||
|
||||
import org.apache.dolphinscheduler.constant.TestConstant; |
||||
import redis.clients.jedis.Jedis; |
||||
import redis.clients.jedis.JedisPool; |
||||
import redis.clients.jedis.JedisPoolConfig; |
||||
|
||||
/** |
||||
* redis util |
||||
*/ |
||||
public class RedisUtil { |
||||
/** |
||||
* redis ip |
||||
*/ |
||||
private static String redisIp; |
||||
|
||||
/** |
||||
* redis port |
||||
*/ |
||||
private static int redisPort; |
||||
|
||||
/** |
||||
* redis password |
||||
*/ |
||||
private static String redisPwd; |
||||
|
||||
/** |
||||
* redis pool config |
||||
*/ |
||||
private static JedisPoolConfig jedisPoolConfig; |
||||
|
||||
/** |
||||
* redis pool |
||||
*/ |
||||
private static JedisPool jedisPool; |
||||
|
||||
/** |
||||
* jedis connection |
||||
*/ |
||||
private Jedis jedis; |
||||
|
||||
/** |
||||
* jedis expire time |
||||
*/ |
||||
private int jedisExpireTime; |
||||
|
||||
/** |
||||
* jedis max total |
||||
*/ |
||||
private static int jedisPoolMaxTotal; |
||||
|
||||
/** |
||||
* jedis max idle |
||||
*/ |
||||
private static int jedisPoolMaxIdle; |
||||
|
||||
/** |
||||
* jedis max wait time |
||||
*/ |
||||
private static int jedisPoolMaxWaitMillis; |
||||
|
||||
/** |
||||
* Whether to perform a valid check when calling the borrowObject method |
||||
*/ |
||||
private static boolean jedisPoolTestOnBorrow; |
||||
|
||||
/** |
||||
* Whether to perform a valid check when calling the returnObject method |
||||
*/ |
||||
private static boolean jedisPoolTestOnReturn; |
||||
|
||||
/** |
||||
* storage local thread |
||||
*/ |
||||
public static ThreadLocal<Jedis> threadLocal = new ThreadLocal<>(); |
||||
|
||||
/* |
||||
* redis init |
||||
*/ |
||||
static { |
||||
// redis properties
|
||||
redisIp = PropertiesReader.getKey("redis.ip"); |
||||
redisPort = Integer.valueOf(PropertiesReader.getKey("redis.port")); |
||||
redisPwd = PropertiesReader.getKey("redis.pwd"); |
||||
//redis pool properties
|
||||
jedisPoolMaxTotal = Integer.valueOf(PropertiesReader.getKey("jedis.pool.maxTotal")); |
||||
jedisPoolMaxIdle = Integer.valueOf(PropertiesReader.getKey("jedis.pool.maxIdle")); |
||||
jedisPoolMaxWaitMillis = Integer.valueOf(PropertiesReader.getKey("jedis.pool.maxWaitMillis")); |
||||
jedisPoolTestOnBorrow = Boolean.valueOf(PropertiesReader.getKey("jedis.pool.testOnBorrow")); |
||||
jedisPoolTestOnReturn = Boolean.valueOf(PropertiesReader.getKey("jedis.pool.testOnReturn")); |
||||
// redis pool start properties
|
||||
jedisPoolConfig = new JedisPoolConfig(); |
||||
jedisPoolConfig.setMaxTotal(jedisPoolMaxTotal); |
||||
jedisPoolConfig.setMaxIdle(jedisPoolMaxIdle); |
||||
jedisPoolConfig.setMaxWaitMillis(jedisPoolMaxWaitMillis); |
||||
jedisPoolConfig.setTestOnBorrow(jedisPoolTestOnBorrow); |
||||
jedisPoolConfig.setTestOnReturn(jedisPoolTestOnReturn); |
||||
// connect redis
|
||||
try { |
||||
System.out.println("redis init"); |
||||
if (redisPwd.isEmpty()) |
||||
jedisPool = new JedisPool(jedisPoolConfig, redisIp, redisPort, TestConstant.THREE_THOUSANG); |
||||
else { |
||||
jedisPool = new JedisPool(jedisPoolConfig, redisIp, redisPort, TestConstant.TEN_THOUSANG, redisPwd); |
||||
} |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
System.out.println("redis connect fail"); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* get redis pool |
||||
* |
||||
* @return redis pool |
||||
*/ |
||||
public static JedisPool getJedisPool() { |
||||
return jedisPool; |
||||
} |
||||
|
||||
/** |
||||
* get jedis connection |
||||
* |
||||
* @return jedis connection |
||||
*/ |
||||
public Jedis getNewJedis() { |
||||
Jedis newJedis = null; |
||||
try { |
||||
newJedis = jedisPool.getResource(); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
System.out.println("redis connection fail"); |
||||
} |
||||
System.out.println("redis connection success"); |
||||
return newJedis; |
||||
} |
||||
|
||||
/** |
||||
* get jedis connection |
||||
* |
||||
* @return jedis connection |
||||
*/ |
||||
public Jedis getJedis() { |
||||
return jedis; |
||||
} |
||||
|
||||
public void setJedisAndExpire(Jedis jedis) { |
||||
this.jedis = jedis; |
||||
threadLocal.set(jedis); |
||||
// jedis expire time(s)
|
||||
jedisExpireTime = Integer.valueOf(PropertiesReader.getKey("jedis.expireTime")); |
||||
System.out.println("redisUtil sets up a redis connection"); |
||||
} |
||||
|
||||
/** |
||||
* set key |
||||
* |
||||
* @param key key |
||||
* @param value value |
||||
* |
||||
*/ |
||||
|
||||
public void setKey(String key, String value) { |
||||
jedis.set(key, value); |
||||
// set expire time 1h
|
||||
jedis.expire(key, jedisExpireTime); |
||||
} |
||||
|
||||
/** |
||||
* get key |
||||
* |
||||
* @param key key |
||||
* @return value |
||||
*/ |
||||
public String getKey(String key) { |
||||
return jedis.get(key); |
||||
} |
||||
|
||||
/** |
||||
* Return jedis connection |
||||
*/ |
||||
public void returnJedis() { |
||||
if (jedis != null) { |
||||
jedis.close(); |
||||
} |
||||
System.out.println("jedis has been returned"); |
||||
} |
||||
} |
@ -0,0 +1,133 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.base; |
||||
|
||||
|
||||
import org.apache.dolphinscheduler.constant.TestConstant; |
||||
import org.apache.dolphinscheduler.util.PropertiesReader; |
||||
import org.openqa.selenium.JavascriptExecutor; |
||||
import org.openqa.selenium.WebDriver; |
||||
import org.openqa.selenium.chrome.ChromeDriver; |
||||
import java.io.IOException; |
||||
import java.util.concurrent.TimeUnit; |
||||
|
||||
/** |
||||
* base driver class
|
||||
*/ |
||||
public class BaseDriver { |
||||
/** |
||||
* driver |
||||
*/ |
||||
private WebDriver driver; |
||||
|
||||
/** |
||||
* chrome driver path |
||||
*/ |
||||
private String chromeDriverPath; |
||||
|
||||
|
||||
/** |
||||
* implicitly wait time(s) |
||||
*/ |
||||
private long implicitlyWait; |
||||
|
||||
/** |
||||
* page load timeout(s) |
||||
*/ |
||||
private long pageLoadTimeout; |
||||
|
||||
/** |
||||
* script Timeout(s) |
||||
*/ |
||||
private long setScriptTimeout; |
||||
|
||||
|
||||
/** |
||||
* Local thread storage is used to store the driver |
||||
*/ |
||||
public static ThreadLocal<WebDriver> threadLocal = new ThreadLocal<>(); |
||||
|
||||
/** |
||||
*Initialization parameters |
||||
*/ |
||||
public BaseDriver() throws IOException { |
||||
/* driver test class path */ |
||||
chromeDriverPath = PropertiesReader.getKey("driver.chromeDriver"); |
||||
|
||||
/* wait time */ |
||||
implicitlyWait = Long.valueOf(PropertiesReader.getKey("driver.timeouts.implicitlyWait")); |
||||
pageLoadTimeout = Long.valueOf(PropertiesReader.getKey("driver.timeouts.pageLoadTimeout")); |
||||
setScriptTimeout = Long.valueOf(PropertiesReader.getKey("driver.timeouts.setScriptTimeout")); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* start chrome browser |
||||
*/ |
||||
public void startBrowser() throws Exception { |
||||
// set chrome driver
|
||||
System.setProperty("webdriver.chrome.driver", chromeDriverPath); |
||||
driver = new ChromeDriver(); |
||||
|
||||
/* driver setting wait time */ |
||||
// implicitly wait time
|
||||
driver.manage().timeouts().implicitlyWait(implicitlyWait, TimeUnit.SECONDS); |
||||
// page load timeout
|
||||
driver.manage().timeouts().pageLoadTimeout(pageLoadTimeout, TimeUnit.SECONDS); |
||||
// script timeout
|
||||
driver.manage().timeouts().setScriptTimeout(setScriptTimeout, TimeUnit.SECONDS); |
||||
|
||||
// window maximize
|
||||
driver.manage().window().maximize(); |
||||
|
||||
// set threadLocal
|
||||
threadLocal.set(driver); |
||||
} |
||||
|
||||
/** |
||||
* get webDriver |
||||
* |
||||
* @return driver |
||||
*/ |
||||
public WebDriver getDriver() { |
||||
return driver; |
||||
} |
||||
|
||||
/** |
||||
* set webDriver |
||||
* |
||||
* @param driver driver |
||||
*/ |
||||
public void setDriver(WebDriver driver) { |
||||
this.driver = driver; |
||||
// Thread local storage
|
||||
threadLocal.set(driver); |
||||
} |
||||
|
||||
/** |
||||
* close browser |
||||
*/ |
||||
public void closeBrowser() throws InterruptedException { |
||||
// JS Show a pop-up box to indicate the end of the test
|
||||
Thread.sleep(TestConstant.ONE_THOUSANG); |
||||
((JavascriptExecutor) driver).executeScript("alert('Test completed, browser closes after 3s')"); |
||||
Thread.sleep(TestConstant.THREE_THOUSANG); |
||||
if (driver != null) { |
||||
driver.quit(); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,353 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.common; |
||||
|
||||
import org.apache.dolphinscheduler.util.PropertiesReader; |
||||
import org.apache.dolphinscheduler.util.RedisUtil; |
||||
import org.openqa.selenium.*; |
||||
import org.openqa.selenium.interactions.Actions; |
||||
import org.openqa.selenium.support.ui.ExpectedConditions; |
||||
import org.openqa.selenium.support.ui.WebDriverWait; |
||||
import redis.clients.jedis.Jedis; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
import java.util.Set; |
||||
|
||||
/** |
||||
* Encapsulate the most basic operations on the interface in the browser |
||||
*/ |
||||
public class BrowserCommon { |
||||
/** |
||||
* driver |
||||
*/ |
||||
protected WebDriver driver; |
||||
|
||||
/** |
||||
* actions |
||||
*/ |
||||
protected Actions actions; |
||||
|
||||
/** |
||||
* Javascript |
||||
*/ |
||||
protected JavascriptExecutor je; |
||||
|
||||
/** |
||||
* Show wait |
||||
*/ |
||||
protected WebDriverWait wait; |
||||
|
||||
/** |
||||
* Jedis |
||||
*/ |
||||
protected Jedis jedis; |
||||
|
||||
/** |
||||
* redis util |
||||
*/ |
||||
protected RedisUtil redisUtil; |
||||
|
||||
/** |
||||
* @param driver driver |
||||
*/ |
||||
public BrowserCommon(WebDriver driver) { |
||||
this.driver = driver; |
||||
this.actions = new Actions(driver); |
||||
this.je = ((JavascriptExecutor) driver); |
||||
// show wait timeout
|
||||
long timeout = Long.valueOf(PropertiesReader.getKey("driver.timeouts.webDriverWait")); |
||||
wait = new WebDriverWait(driver, timeout); |
||||
} |
||||
|
||||
/** |
||||
* @param driver driver |
||||
* @param jedis jedis |
||||
*/ |
||||
public BrowserCommon(WebDriver driver, Jedis jedis) { |
||||
this.driver = driver; |
||||
this.actions = new Actions(driver); |
||||
this.je = ((JavascriptExecutor) driver); |
||||
// show wait timeout
|
||||
long timeout = Long.valueOf(PropertiesReader.getKey("driver.timeouts.webDriverWait")); |
||||
wait = new WebDriverWait(driver, timeout); |
||||
this.jedis = jedis; |
||||
} |
||||
|
||||
/** |
||||
* @param driver driver |
||||
* @param redisUtil redisUtil |
||||
*/ |
||||
public BrowserCommon(WebDriver driver, RedisUtil redisUtil) { |
||||
this.driver = driver; |
||||
this.actions = new Actions(driver); |
||||
this.je = ((JavascriptExecutor) driver); |
||||
// show wait timeout
|
||||
long timeout = Long.valueOf(PropertiesReader.getKey("driver.timeouts.webDriverWait")); |
||||
wait = new WebDriverWait(driver, timeout); |
||||
// this.redisUtil = redisUtil;
|
||||
// this.jedis = redisUtil.getJedis();
|
||||
} |
||||
|
||||
|
||||
/** |
||||
* Get WebElement element object through element positioning |
||||
* |
||||
* @param locator By |
||||
* @return WebElement |
||||
*/ |
||||
|
||||
public WebElement locateElement(By locator) { |
||||
return wait.until(ExpectedConditions.presenceOfElementLocated(locator)); |
||||
} |
||||
|
||||
/** |
||||
* Click button element |
||||
* @param locator By |
||||
* @return clickButton |
||||
*/ |
||||
public WebElement clickButton(By locator) { |
||||
WebElement buttonElement = locateElement(locator); |
||||
wait.until(ExpectedConditions.elementToBeClickable(locator)); |
||||
ExpectedConditions.elementToBeClickable(locator); |
||||
buttonElement.click(); |
||||
return buttonElement; |
||||
} |
||||
|
||||
/** |
||||
* Click element |
||||
* |
||||
* @param locator By |
||||
* @return inputElement |
||||
*/ |
||||
public WebElement clickElement(By locator) { |
||||
WebElement clickElement = locateElement(locator); |
||||
clickElement.click(); |
||||
return clickElement; |
||||
} |
||||
|
||||
/** |
||||
* input element |
||||
* |
||||
* @param locator By |
||||
* @param content Input content |
||||
* @return inputElement |
||||
*/ |
||||
public WebElement sendInput(By locator, String content) { |
||||
WebElement inputElement = locateElement(locator); |
||||
inputElement.clear(); |
||||
inputElement.sendKeys(content); |
||||
return inputElement; |
||||
} |
||||
/** |
||||
* clear element |
||||
* |
||||
* @param locator By |
||||
*/ |
||||
public void clearInput(By locator) { |
||||
WebElement clearElement = locateElement(locator); |
||||
clearElement.click(); |
||||
clearElement.clear(); |
||||
clearElement.sendKeys(Keys.chord(Keys.CONTROL, "a")); |
||||
clearElement.sendKeys(Keys.DELETE); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* move to element |
||||
* |
||||
* @param locator BY |
||||
* @return actions |
||||
*/ |
||||
public Actions moveToElement(By locator) { |
||||
return actions.moveToElement(locateElement(locator)); |
||||
} |
||||
|
||||
/** |
||||
* mouse drag element |
||||
* |
||||
* @param source_locator BY |
||||
* @param target_locator BY |
||||
* @param X X-axis |
||||
* @param Y Y-axis |
||||
*/ |
||||
public void dragAndDropBy(By source_locator, By target_locator, int X, int Y) { |
||||
WebElement sourcetElement = locateElement(source_locator); |
||||
WebElement targetElement = locateElement(target_locator); |
||||
actions.dragAndDrop(sourcetElement, targetElement).moveToElement(targetElement, X, Y).perform(); |
||||
actions.release(); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* jump page |
||||
* |
||||
* @param url url |
||||
*/ |
||||
public void jumpPage(String url) { |
||||
driver.get(url); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Find the next handle, recommended for two windows |
||||
* |
||||
* @return driver |
||||
*/ |
||||
public WebDriver switchNextHandle() { |
||||
// Current window handle
|
||||
String currentHandle = driver.getWindowHandle(); |
||||
// All window handle
|
||||
Set<String> allHandles = driver.getWindowHandles(); |
||||
// Finding the next handle
|
||||
for (String handle : allHandles) { |
||||
if (!handle.equals(currentHandle)) { |
||||
return driver.switchTo().window(handle); |
||||
} |
||||
} |
||||
return driver; |
||||
} |
||||
|
||||
/** |
||||
* Multi-window switch handle, according to the handle number passed in |
||||
* |
||||
* @param num Number starts from 1 |
||||
* @return driver |
||||
*/ |
||||
public WebDriver switchHandle(int num) { |
||||
// current handle
|
||||
String currentHandle = driver.getWindowHandle(); |
||||
// all handle
|
||||
Set<String> allHandlesSet = driver.getWindowHandles(); |
||||
List<String> allHandlesList = new ArrayList<>(allHandlesSet); |
||||
// switch handle
|
||||
return driver.switchTo().window(allHandlesList.get(num - 1)); |
||||
} |
||||
|
||||
/** |
||||
* Switch frame structure |
||||
* |
||||
* @param locator frame |
||||
* @return driver |
||||
*/ |
||||
public WebDriver switchFrame(By locator) { |
||||
return driver.switchTo().frame(locateElement(locator)); |
||||
} |
||||
|
||||
/** |
||||
* Switch parent frame structure |
||||
* |
||||
* @return driver |
||||
*/ |
||||
public WebDriver switchParentFrame() { |
||||
return driver.switchTo().parentFrame(); |
||||
} |
||||
|
||||
/** |
||||
* Switch out of frame structure |
||||
* |
||||
* @return driver |
||||
*/ |
||||
public WebDriver switchOutOfFrame() { |
||||
return driver.switchTo().defaultContent(); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* execute JS Script |
||||
* |
||||
* @param script JS script |
||||
*/ |
||||
public void executeScript(String script) { |
||||
je.executeScript(script); |
||||
} |
||||
|
||||
/** |
||||
* execute JS Script |
||||
* |
||||
* @param script JS script |
||||
* @param args Object element array |
||||
*/ |
||||
public void executeScript(String script, Object... args) { |
||||
je.executeScript(script, args); |
||||
} |
||||
|
||||
/** |
||||
* Page slide to top |
||||
*/ |
||||
public void scrollToTop() { |
||||
executeScript("window.scrollTo(0, 0)"); |
||||
} |
||||
|
||||
/** |
||||
* Page slides to the bottom |
||||
*/ |
||||
public void scrollToBottom() { |
||||
executeScript("window.scrollTo(0, document.body.scrollHeight)"); |
||||
} |
||||
|
||||
/** |
||||
* Page swipe makes the top of the element align with the top of the page |
||||
* |
||||
* @param by Elements that need to be aligned with the top of the page |
||||
*/ |
||||
public void scrollElementTopToTop(By by) { |
||||
executeScript("arguments[0].scrollIntoView(true);", driver.findElement(by)); |
||||
} |
||||
|
||||
/** |
||||
* Page sliding makes the bottom of the element aligned with the bottom of the page |
||||
* |
||||
* @param by Elements that need to be aligned with the bottom of the page |
||||
*/ |
||||
public void scrollElementBottomToBottom(By by) { |
||||
executeScript("arguments[0].scrollIntoView(false);", driver.findElement(by)); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Determine if the current page title is the specified title |
||||
* |
||||
* @param title title |
||||
* @return boolean |
||||
*/ |
||||
|
||||
public boolean ifTitleIs(String title) { |
||||
return wait.until(ExpectedConditions.titleIs(title)); |
||||
} |
||||
|
||||
/** |
||||
* Determines whether the current page title contains the specified text |
||||
* |
||||
* @param text text |
||||
* @return boolean |
||||
*/ |
||||
public boolean ifTitleContains(String text) { |
||||
return wait.until(ExpectedConditions.titleContains(text)); |
||||
} |
||||
|
||||
/** |
||||
* Determines whether the text value of an element on the current page is the specified text |
||||
* |
||||
* @param locator By |
||||
* @param text text |
||||
* @return boolean |
||||
*/ |
||||
public boolean ifTextExists(By locator, String text) { |
||||
return wait.until(ExpectedConditions.textToBePresentInElementLocated(locator, text)); |
||||
} |
||||
} |
@ -0,0 +1,50 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.common; |
||||
|
||||
import org.apache.dolphinscheduler.util.RedisUtil; |
||||
import org.openqa.selenium.WebDriver; |
||||
import redis.clients.jedis.Jedis; |
||||
|
||||
|
||||
/** |
||||
* Encapsulate the operation methods that can be used for each module page |
||||
*/ |
||||
public class PageCommon extends BrowserCommon { |
||||
/** |
||||
* @param driver driver |
||||
*/ |
||||
public PageCommon(WebDriver driver) { |
||||
super(driver); |
||||
} |
||||
|
||||
/** |
||||
* @param driver driver |
||||
* @param jedis jedis |
||||
*/ |
||||
public PageCommon(WebDriver driver, Jedis jedis) { |
||||
super(driver, jedis); |
||||
} |
||||
|
||||
/** |
||||
* @param driver driver |
||||
* @param redisUtil redisUtil |
||||
*/ |
||||
public PageCommon(WebDriver driver, RedisUtil redisUtil) { |
||||
super(driver, redisUtil); |
||||
} |
||||
} |
@ -0,0 +1,43 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.data; |
||||
|
||||
import org.apache.dolphinscheduler.util.PropertiesReader; |
||||
|
||||
/** |
||||
* Landing page object: data |
||||
*/ |
||||
|
||||
public class LoginData { |
||||
/** |
||||
* Login URL |
||||
*/ |
||||
public static final String URL = PropertiesReader.getKey("LOGIN_URL"); |
||||
|
||||
|
||||
/** |
||||
* Login username |
||||
*/ |
||||
public static final String USER = PropertiesReader.getKey("USER_NAME"); |
||||
|
||||
/** |
||||
* Login password |
||||
*/ |
||||
public static final String PASSWORD = PropertiesReader.getKey("PASSWORD"); |
||||
|
||||
public static final String TENANT = "租户管理 - DolphinScheduler"; |
||||
} |
@ -0,0 +1,26 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.data.project; |
||||
|
||||
public class CreatProjectData { |
||||
// create project name
|
||||
public static final String PROJECT_NAME = "selenium_project"; |
||||
// create project description
|
||||
public static final String DESCRIPTION = "test create project description"; |
||||
// project page title
|
||||
public static final String PROJECT_TITLE = "项目 - DolphinScheduler"; |
||||
} |
@ -0,0 +1,36 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.data.project; |
||||
|
||||
public class CreatWorkflowData { |
||||
//input shell task name
|
||||
public static final String SHELL_TASK_NAME = "shell task description test"; |
||||
|
||||
//input shell task description
|
||||
public static final String SHELL_TASK_DESCRIPTION = "shell task description test"; |
||||
|
||||
//input timeout
|
||||
public static final String INPUT_TIMEOUT = "60"; |
||||
|
||||
//input shell script
|
||||
public static final String SHELL_SCRIPT = "echo 1111111"; |
||||
|
||||
public static final String WORKFLOW_TITLE = "创建流程定义 - DolphinScheduler"; |
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,55 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
/** |
||||
* Tenant page object: data |
||||
*/ |
||||
package org.apache.dolphinscheduler.data.security; |
||||
|
||||
import org.apache.dolphinscheduler.data.LoginData; |
||||
|
||||
public class TenantManageData { |
||||
/** |
||||
* Tenant URL |
||||
*/ |
||||
public static final String TENANAT_URL = LoginData.URL + "/ui/#/security/tenant"; |
||||
|
||||
/** |
||||
* Tenant Code |
||||
*/ |
||||
public static final String TENANAT_CODE = "dolphinscheduler_tenant_code2"; |
||||
|
||||
/** |
||||
* Tenant Name |
||||
*/ |
||||
public static final String TENANAT_NAME = "dolphinscheduler_tenant_Name"; |
||||
|
||||
/** |
||||
* Queue |
||||
*/ |
||||
public static final String QUEUE = "default"; |
||||
|
||||
/** |
||||
* Description |
||||
*/ |
||||
public static final String DESCRIPTION = "creat tenant test"; |
||||
|
||||
public static final String TENANAT_MANAGE = "租户管理 - DolphinScheduler"; |
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,34 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.data.security; |
||||
|
||||
import org.apache.dolphinscheduler.data.LoginData; |
||||
|
||||
public class UserManageData { |
||||
public static final String USER_URL = LoginData.URL + "/ui/#/security/users"; |
||||
|
||||
public static final String USERNAME = "selenium111"; |
||||
|
||||
public static final String PASSWORD = "123456qwe"; |
||||
|
||||
public static final String EMAIL = "123456789@qq.com"; |
||||
|
||||
public static final String PHONE = "15811112222"; |
||||
|
||||
public static final String USER_MANAGE = "用户管理 - DolphinScheduler"; |
||||
|
||||
} |
@ -0,0 +1,33 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.locator; |
||||
|
||||
import org.openqa.selenium.By; |
||||
|
||||
/** |
||||
* Page object: element positioning |
||||
*/ |
||||
|
||||
public class LoginLocator { |
||||
public static final By LOGIN_INPUT_USER = By.xpath("//input[@class='input-element suffix']"); |
||||
|
||||
public static final By LOGIN_INPUT_PASSWORD = By.xpath("//input[@class='input-element suffix']"); |
||||
|
||||
public static final By LOGIN_BUTTON = By.xpath("//button"); |
||||
|
||||
public static final By LOGIN_BUTTON_MOVE = By.xpath("//button[contains(.,' Loading...')]"); |
||||
} |
@ -0,0 +1,36 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.locator.project; |
||||
|
||||
import org.openqa.selenium.By; |
||||
|
||||
public class CreateProjectLocator { |
||||
//click project manage
|
||||
public static final By PROJECT_MANAGE = By.xpath("//div[2]/div/a/span"); |
||||
|
||||
//click create project button
|
||||
public static final By CREATE_PROJECT_BUTTON = By.xpath("//button/span"); |
||||
|
||||
//input project name
|
||||
public static final By PROJECT_NAME = By.xpath("//div[2]/div/div/div[2]/div/input"); |
||||
|
||||
//input project description
|
||||
public static final By PROJECT_DESCRIPTION = By.xpath("//textarea"); |
||||
|
||||
//submit button
|
||||
public static final By SUBMIT_BUTTON = By.xpath("//div[3]/button[2]/span"); |
||||
} |
@ -0,0 +1,97 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.apache.dolphinscheduler.locator.project; |
||||
|
||||
import org.openqa.selenium.By; |
||||
|
||||
public class CreateWorkflowLocator { |
||||
// click project manage
|
||||
public static final By CLICK_PROJECT_MANAGE = By.xpath("//div[2]/div/a/span"); |
||||
|
||||
// click project name
|
||||
public static final By CLICK_PROJECT_NAME = By.xpath("//span/a"); |
||||
|
||||
// click workflow define
|
||||
public static final By CLICK_WORKFLOW_DEFINE = By.xpath("//li/span"); |
||||
|
||||
// click create workflow button
|
||||
public static final By CLICK_CREATE_WORKFLOW_BUTTON = By.xpath("//button/span"); |
||||
|
||||
//mouse down at shell
|
||||
public static final By MOUSE_DOWN_AT_SHELL = By.xpath("//*[@id='SHELL']/div/div"); |
||||
|
||||
//mouse down at spark
|
||||
public static final By MOUSE_DOWN_AT_SPARK = By.xpath("//div[5]/div/div"); |
||||
|
||||
//mouse move at DAG
|
||||
public static final By MOUSE_MOVE_SHELL_AT_DAG = By.xpath("//div[2]/div/div[2]/div[2]/div/div"); |
||||
|
||||
// //click shell task
|
||||
// public static final By CLICK_SHELL_TASK = By.xpath("//div[2]/div/div[2]/div[2]/div/div");
|
||||
|
||||
//input shell task _name
|
||||
public static final By INPUT_SHELL_TASK_NAME = By.xpath("//input"); |
||||
|
||||
//click stop run type
|
||||
public static final By CLICK_STOP_RUN_TYPE = By.xpath("//label[2]/span/input"); |
||||
|
||||
//click normal run type
|
||||
public static final By CLICK_NORMAL_RUN_TYPE = By.xpath("//span/input"); |
||||
|
||||
//input shell task description
|
||||
public static final By INPUT_SHELL_TASK_DESCRIPTION = By.xpath("//label/div/textarea"); |
||||
|
||||
//click task priority
|
||||
public static final By CLICK_TASK_PRIORITY = By.xpath("//span/div/div/div/div/div"); |
||||
|
||||
//select task priority
|
||||
public static final By SELECT_TASK_PRIORITY = By.xpath("//li[2]/li/span"); |
||||
|
||||
//click work group
|
||||
public static final By CLICK_WORK_GROUP = By.xpath("//div/div/input"); |
||||
|
||||
//select work group
|
||||
public static final By SELECT_WORK_GROUP = By.xpath("//div[4]/div[2]/div/div[1]/div/input"); |
||||
|
||||
//select number of failed retries
|
||||
public static final By SELECT_FAIL_RETRIES_NUMBER = By.xpath("//div[5]/div[2]/div[1]/div[1]/div/input"); |
||||
|
||||
//select failed retry interval
|
||||
public static final By SELECT_FAIL_RETRIES_INTERVAL = By.xpath("//div[5]/div[2]/div[2]/div[1]/div/input"); |
||||
|
||||
//click timeout alarm
|
||||
public static final By CLICK_TIMEOUT_ALARM = By.xpath("//label/div/span/span"); |
||||
|
||||
//select timeout fail
|
||||
public static final By SELECT_TIMEOUT_FAIL = By.xpath("//div/div/label[2]/span/input"); |
||||
|
||||
//cancel timeout alarm
|
||||
public static final By CANCEL_TIMEOUT_ALARM = By.xpath("//div/div/label/span/input"); |
||||
|
||||
//select timeout alarm
|
||||
public static final By SELECT_TIMEOUT_ALARM = By.xpath("//div/div/label/span/input"); |
||||
|
||||
//input timeout
|
||||
public static final By SELECT_TIMEOUT = By.xpath("//div[3]/div[2]/label/div/input"); |
||||
|
||||
//input script
|
||||
public static final By INPUT_SCRIPT = By.xpath("//div[2]/div/div/div/div/div/textarea"); |
||||
|
||||
|
||||
|
||||
} |
@ -0,0 +1,33 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.locator.security; |
||||
|
||||
import org.openqa.selenium.By; |
||||
|
||||
public class TenantManageLocator{ |
||||
public static final By CREATE_TENANT_BUTTON = By.xpath("//button[@class='ans-btn ans-btn-ghost ans-btn-small']"); |
||||
|
||||
public static final By TENANT_INPUT_CODE = By.xpath("//div[2]/div/div/div[2]/div/input"); |
||||
|
||||
public static final By TENANT_INPUT_NAME = By.xpath("//div[2]/div[2]/div/input"); |
||||
|
||||
public static final By QUEUE = By.xpath("//textarea"); |
||||
|
||||
public static final By DESCRIPTION = By.xpath("//textarea"); |
||||
|
||||
public static final By SUBMIT_BUTTON = By.xpath("//div[3]/button[2]/span"); |
||||
} |
@ -0,0 +1,45 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.locator.security; |
||||
|
||||
import org.openqa.selenium.By; |
||||
|
||||
public class UserManageLocator { |
||||
|
||||
public static final By CLICK_USER_MANAGE = By.xpath("//div[3]/div/a/div/a/span"); |
||||
|
||||
public static final By CLICK_CREATE_USER_BUTTON = By.xpath("//span[contains(.,'创建用户')]"); |
||||
|
||||
public static final By INPUT_USERNAME = By.xpath("//div[2]/div/div/div[2]/div/input"); |
||||
|
||||
public static final By INPUT_PASSWORD = By.xpath("//div[2]/div[2]/div/input"); |
||||
|
||||
public static final By CLICK_TENANT = By.xpath("//div[3]/div[2]/div/div/div/input"); |
||||
|
||||
public static final By SELECT_TENANT = By.xpath("//div[3]/div[2]/div/div[2]/div/div/div/ul/li/span"); |
||||
|
||||
public static final By CLICK_QUEUE = By.xpath("//div[4]/div[2]/div/div/div/input"); |
||||
|
||||
public static final By SELECT_QUEUE = By.xpath("//div[4]/div[2]/div/div[2]/div/div/div/ul/li/span"); |
||||
|
||||
public static final By TENANT_INPUT_EMAIL = By.xpath("//div[5]/div[2]/div/input"); |
||||
|
||||
public static final By TENANT_INPUT_PHONE = By.xpath("//div[6]/div[2]/div/input"); |
||||
|
||||
public static final By SUBMIT = By.xpath("//div[3]/button[2]/span"); |
||||
|
||||
} |
@ -0,0 +1,65 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.page; |
||||
|
||||
import org.apache.dolphinscheduler.common.PageCommon; |
||||
import org.apache.dolphinscheduler.constant.TestConstant; |
||||
import org.apache.dolphinscheduler.data.LoginData; |
||||
import org.apache.dolphinscheduler.locator.LoginLocator; |
||||
import org.apache.dolphinscheduler.util.RedisUtil; |
||||
import org.openqa.selenium.WebDriver; |
||||
|
||||
|
||||
|
||||
public class LoginPage extends PageCommon { |
||||
/** |
||||
* Unique constructor |
||||
* @param driver driver |
||||
*/ |
||||
public LoginPage(WebDriver driver) { |
||||
super(driver); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* jump page |
||||
*/ |
||||
public void jumpPage() { |
||||
System.out.println("jump login page"); |
||||
super.jumpPage(LoginData.URL); |
||||
} |
||||
|
||||
/** |
||||
* login |
||||
* |
||||
* @return Whether to enter the specified page after searching |
||||
*/ |
||||
public boolean login() throws InterruptedException { |
||||
System.out.println("LoginPage"); |
||||
// login data
|
||||
sendInput(LoginLocator.LOGIN_INPUT_USER, LoginData.USER); |
||||
sendInput(LoginLocator.LOGIN_INPUT_PASSWORD, LoginData.PASSWORD); |
||||
|
||||
// click login button
|
||||
clickButton(LoginLocator.LOGIN_BUTTON); |
||||
|
||||
moveToElement(LoginLocator.LOGIN_BUTTON_MOVE); |
||||
|
||||
// Whether to enter the specified page after login
|
||||
return ifTitleContains(LoginData.TENANT); |
||||
} |
||||
} |
@ -0,0 +1,58 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.page.project; |
||||
|
||||
import org.apache.dolphinscheduler.common.PageCommon; |
||||
import org.apache.dolphinscheduler.constant.TestConstant; |
||||
import org.apache.dolphinscheduler.data.project.CreatProjectData; |
||||
import org.apache.dolphinscheduler.locator.project.CreateProjectLocator; |
||||
import org.openqa.selenium.WebDriver; |
||||
|
||||
public class CreateProjectPage extends PageCommon { |
||||
public CreateProjectPage(WebDriver driver) { |
||||
super(driver); |
||||
} |
||||
/** |
||||
* jump page |
||||
*/ |
||||
public void jumpPage() throws InterruptedException { |
||||
Thread.sleep(TestConstant.ONE_THOUSANG); |
||||
clickElement(CreateProjectLocator.PROJECT_MANAGE); |
||||
} |
||||
|
||||
/** |
||||
* creatTenant |
||||
* |
||||
* @return Whether to enter the specified page after creat tenant |
||||
*/ |
||||
public boolean createProject() throws InterruptedException { |
||||
Thread.sleep(TestConstant.ONE_THOUSANG); |
||||
//click create project
|
||||
clickElement(CreateProjectLocator.CREATE_PROJECT_BUTTON); |
||||
Thread.sleep(TestConstant.ONE_THOUSANG); |
||||
|
||||
// input create project data
|
||||
sendInput(CreateProjectLocator.PROJECT_NAME, CreatProjectData.PROJECT_NAME); |
||||
sendInput(CreateProjectLocator.PROJECT_DESCRIPTION, CreatProjectData.DESCRIPTION); |
||||
|
||||
// click submit button
|
||||
clickButton(CreateProjectLocator.SUBMIT_BUTTON); |
||||
|
||||
// Whether to enter the specified page after submit
|
||||
return ifTitleContains(CreatProjectData.PROJECT_TITLE); |
||||
} |
||||
} |
@ -0,0 +1,108 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.page.project; |
||||
|
||||
import org.apache.dolphinscheduler.common.PageCommon; |
||||
import org.apache.dolphinscheduler.constant.TestConstant; |
||||
import org.apache.dolphinscheduler.data.project.CreatWorkflowData; |
||||
import org.apache.dolphinscheduler.locator.project.CreateProjectLocator; |
||||
import org.apache.dolphinscheduler.locator.project.CreateWorkflowLocator; |
||||
import org.openqa.selenium.WebDriver; |
||||
|
||||
public class CreateWorkflowPage extends PageCommon { |
||||
public CreateWorkflowPage(WebDriver driver) { |
||||
super(driver); |
||||
} |
||||
/** |
||||
* jump page |
||||
*/ |
||||
public boolean CreateWorkflow() throws InterruptedException { |
||||
Thread.sleep(TestConstant.ONE_THOUSANG); |
||||
// click project manage
|
||||
clickElement(CreateProjectLocator.PROJECT_MANAGE); |
||||
Thread.sleep(TestConstant.ONE_THOUSANG); |
||||
|
||||
// click project name
|
||||
clickElement(CreateWorkflowLocator.CLICK_PROJECT_NAME); |
||||
Thread.sleep(TestConstant.ONE_THOUSANG); |
||||
|
||||
// click workflow define
|
||||
clickElement(CreateWorkflowLocator.CLICK_WORKFLOW_DEFINE); |
||||
|
||||
// click create workflow button
|
||||
clickElement(CreateWorkflowLocator.CLICK_CREATE_WORKFLOW_BUTTON); |
||||
|
||||
//drag shell_task
|
||||
dragAndDropBy(CreateWorkflowLocator.MOUSE_DOWN_AT_SHELL,CreateWorkflowLocator.MOUSE_MOVE_SHELL_AT_DAG, 3 ,6); |
||||
|
||||
//input shell task _name
|
||||
sendInput(CreateWorkflowLocator.INPUT_SHELL_TASK_NAME , CreatWorkflowData.SHELL_TASK_NAME); |
||||
|
||||
//click stop run type
|
||||
clickElement(CreateWorkflowLocator.CLICK_STOP_RUN_TYPE); |
||||
|
||||
|
||||
//click normal run type
|
||||
clickElement(CreateWorkflowLocator.CLICK_NORMAL_RUN_TYPE); |
||||
|
||||
|
||||
//input shell task description
|
||||
sendInput(CreateWorkflowLocator.INPUT_SHELL_TASK_DESCRIPTION , CreatWorkflowData.SHELL_TASK_DESCRIPTION); |
||||
|
||||
//select task priority
|
||||
clickElement(CreateWorkflowLocator.CLICK_TASK_PRIORITY); |
||||
clickElement(CreateWorkflowLocator.SELECT_TASK_PRIORITY); |
||||
|
||||
//select work group
|
||||
clickElement(CreateWorkflowLocator.CLICK_WORK_GROUP); |
||||
clickElement(CreateWorkflowLocator.SELECT_WORK_GROUP); |
||||
|
||||
//select number of failed retries
|
||||
clickElement(CreateWorkflowLocator.SELECT_FAIL_RETRIES_NUMBER); |
||||
|
||||
//select failed retry interval
|
||||
clickElement(CreateWorkflowLocator.SELECT_FAIL_RETRIES_INTERVAL); |
||||
|
||||
|
||||
//click timeout alarm
|
||||
clickElement(CreateWorkflowLocator.CLICK_TIMEOUT_ALARM); |
||||
|
||||
|
||||
//select timeout fail
|
||||
clickElement(CreateWorkflowLocator.SELECT_TIMEOUT_FAIL); |
||||
|
||||
|
||||
//cancel timeout alarm
|
||||
clickElement(CreateWorkflowLocator.CANCEL_TIMEOUT_ALARM); |
||||
|
||||
|
||||
//select timeout alarm
|
||||
clickElement(CreateWorkflowLocator.SELECT_TIMEOUT_ALARM); |
||||
|
||||
//clear input
|
||||
clearInput(CreateWorkflowLocator.SELECT_TIMEOUT); |
||||
Thread.sleep(TestConstant.ONE_THOUSANG); |
||||
|
||||
//input timeout
|
||||
sendInput(CreateWorkflowLocator.SELECT_TIMEOUT,CreatWorkflowData.INPUT_TIMEOUT); |
||||
|
||||
//input script
|
||||
sendInput(CreateWorkflowLocator.INPUT_SCRIPT, CreatWorkflowData.SHELL_SCRIPT); |
||||
|
||||
return ifTitleContains(CreatWorkflowData.WORKFLOW_TITLE); |
||||
} |
||||
} |
@ -0,0 +1,69 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.page.security; |
||||
|
||||
import org.apache.dolphinscheduler.common.PageCommon; |
||||
import org.apache.dolphinscheduler.constant.TestConstant; |
||||
import org.apache.dolphinscheduler.data.LoginData; |
||||
import org.apache.dolphinscheduler.data.security.TenantManageData; |
||||
import org.apache.dolphinscheduler.locator.LoginLocator; |
||||
import org.apache.dolphinscheduler.locator.security.TenantManageLocator; |
||||
import org.apache.dolphinscheduler.util.RedisUtil; |
||||
import org.openqa.selenium.WebDriver; |
||||
|
||||
public class TenantManagePage extends PageCommon { |
||||
/** |
||||
* Unique constructor |
||||
* @param driver driver |
||||
*/ |
||||
public TenantManagePage(WebDriver driver) { |
||||
super(driver); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* jump page |
||||
*/ |
||||
public void jumpPage() { |
||||
System.out.println("jump tenant page"); |
||||
super.jumpPage(TenantManageData.TENANAT_URL); |
||||
} |
||||
|
||||
/** |
||||
* createTenant |
||||
* |
||||
* @return Whether to enter the specified page after creat tenant |
||||
*/ |
||||
public boolean createTenant() throws InterruptedException { |
||||
Thread.sleep(TestConstant.ONE_THOUSANG); |
||||
|
||||
//create tenant
|
||||
clickButton(TenantManageLocator.CREATE_TENANT_BUTTON); |
||||
|
||||
// tenant data
|
||||
sendInput(TenantManageLocator.TENANT_INPUT_CODE, TenantManageData.TENANAT_CODE); |
||||
sendInput(TenantManageLocator.TENANT_INPUT_NAME, TenantManageData.TENANAT_NAME); |
||||
sendInput(TenantManageLocator.QUEUE, TenantManageData.QUEUE); |
||||
sendInput(TenantManageLocator.DESCRIPTION, TenantManageData.DESCRIPTION); |
||||
|
||||
// click button
|
||||
clickButton(TenantManageLocator.SUBMIT_BUTTON); |
||||
|
||||
// Whether to enter the specified page after submit
|
||||
return ifTitleContains(TenantManageData.TENANAT_MANAGE); |
||||
} |
||||
} |
@ -0,0 +1,67 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.page.security; |
||||
|
||||
import org.apache.dolphinscheduler.common.PageCommon; |
||||
import org.apache.dolphinscheduler.constant.TestConstant; |
||||
import org.apache.dolphinscheduler.data.security.UserManageData; |
||||
import org.apache.dolphinscheduler.locator.security.UserManageLocator; |
||||
import org.openqa.selenium.WebDriver; |
||||
|
||||
public class UserManagePage extends PageCommon { |
||||
public UserManagePage(WebDriver driver) { |
||||
super(driver); |
||||
} |
||||
/** |
||||
* jump page |
||||
*/ |
||||
public void jumpPage() { |
||||
System.out.println("jump tenant page"); |
||||
super.jumpPage(UserManageData.USER_URL); |
||||
} |
||||
|
||||
/** |
||||
* creatTenant |
||||
* |
||||
* @return Whether to enter the specified page after creat tenant |
||||
*/ |
||||
public boolean createUser() throws InterruptedException { |
||||
Thread.sleep(TestConstant.ONE_THOUSANG); |
||||
// click user manage
|
||||
clickElement(UserManageLocator.CLICK_USER_MANAGE); |
||||
Thread.sleep(TestConstant.ONE_THOUSANG); |
||||
|
||||
// click create user button
|
||||
clickButton(UserManageLocator.CLICK_CREATE_USER_BUTTON); |
||||
|
||||
// input user data
|
||||
sendInput(UserManageLocator.INPUT_USERNAME, UserManageData.USERNAME); |
||||
sendInput(UserManageLocator.INPUT_PASSWORD, UserManageData.PASSWORD); |
||||
clickButton(UserManageLocator.CLICK_TENANT); |
||||
clickButton(UserManageLocator.SELECT_TENANT); |
||||
clickButton(UserManageLocator.CLICK_QUEUE); |
||||
clickButton(UserManageLocator.SELECT_QUEUE); |
||||
sendInput(UserManageLocator.TENANT_INPUT_EMAIL, UserManageData.EMAIL); |
||||
sendInput(UserManageLocator.TENANT_INPUT_PHONE, UserManageData.PHONE); |
||||
|
||||
// click button
|
||||
clickButton(UserManageLocator.SUBMIT); |
||||
|
||||
// Whether to enter the specified page after submit
|
||||
return ifTitleContains(UserManageData.USER_MANAGE); |
||||
} |
||||
} |
@ -0,0 +1,37 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.testcase; |
||||
|
||||
import org.apache.dolphinscheduler.base.BaseTest; |
||||
import org.apache.dolphinscheduler.page.LoginPage; |
||||
import org.testng.annotations.Test; |
||||
|
||||
|
||||
public class LoginTest extends BaseTest { |
||||
private LoginPage loginPage; |
||||
@Test(description = "LoginTest", priority = 1) |
||||
public void testLogin() throws InterruptedException { |
||||
// init login page
|
||||
loginPage = new LoginPage(driver); |
||||
|
||||
// enter login page
|
||||
loginPage.jumpPage(); |
||||
|
||||
//assert login page
|
||||
assert loginPage.login(); |
||||
} |
||||
} |
@ -0,0 +1,36 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.testcase.project; |
||||
|
||||
import org.apache.dolphinscheduler.base.BaseTest; |
||||
import org.apache.dolphinscheduler.page.project.CreateProjectPage; |
||||
import org.testng.annotations.Test; |
||||
|
||||
public class CreateProjectTest extends BaseTest { |
||||
private CreateProjectPage createProjectPage; |
||||
|
||||
@Test(description = "TenantTest", priority = 1) |
||||
public void testUserManage() throws InterruptedException { |
||||
createProjectPage = new CreateProjectPage(driver); |
||||
// enter user manage page
|
||||
createProjectPage.jumpPage(); |
||||
//assert user manage page
|
||||
assert createProjectPage.createProject(); |
||||
} |
||||
|
||||
} |
||||
|
@ -0,0 +1,34 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.testcase.project; |
||||
|
||||
import org.apache.dolphinscheduler.base.BaseTest; |
||||
import org.apache.dolphinscheduler.page.project.CreateWorkflowPage; |
||||
import org.testng.annotations.Test; |
||||
|
||||
public class CreateWorkflowTest extends BaseTest { |
||||
private CreateWorkflowPage createWorkflowPage; |
||||
|
||||
@Test(description = "CreateWorkflowTest", priority = 1) |
||||
public void CreateWorkflowTest() throws InterruptedException { |
||||
createWorkflowPage = new CreateWorkflowPage(driver); |
||||
// enter user manage page
|
||||
// createWorkflowPage.jumpPage();
|
||||
//assert user manage page
|
||||
assert createWorkflowPage.CreateWorkflow(); |
||||
} |
||||
} |
@ -0,0 +1,34 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.testcase.security; |
||||
|
||||
import org.apache.dolphinscheduler.base.BaseTest; |
||||
import org.apache.dolphinscheduler.page.security.TenantManagePage; |
||||
import org.testng.annotations.Test; |
||||
|
||||
public class TenantManageTest extends BaseTest { |
||||
private TenantManagePage tenantManagePage; |
||||
|
||||
@Test(description = "TenantTest", priority = 1) |
||||
public void testTenantManage() throws InterruptedException { |
||||
tenantManagePage = new TenantManagePage(driver); |
||||
// enter tenant manage page
|
||||
tenantManagePage.jumpPage(); |
||||
//assert tenant manage page
|
||||
assert tenantManagePage.createTenant(); |
||||
} |
||||
} |
@ -0,0 +1,34 @@
|
||||
/* |
||||
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||
* contributor license agreements. See the NOTICE file distributed with |
||||
* this work for additional information regarding copyright ownership. |
||||
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
* (the "License"); you may not use this file except in compliance with |
||||
* the License. You may obtain a copy of the License at |
||||
* |
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
package org.apache.dolphinscheduler.testcase.security; |
||||
|
||||
import org.apache.dolphinscheduler.base.BaseTest; |
||||
import org.apache.dolphinscheduler.page.security.UserManagePage; |
||||
import org.testng.annotations.Test; |
||||
|
||||
public class UserManageTest extends BaseTest { |
||||
private UserManagePage userManagePage; |
||||
|
||||
@Test(description = "TenantTest", priority = 1) |
||||
public void testUserManage() throws InterruptedException { |
||||
userManagePage = new UserManagePage(driver); |
||||
// enter user manage page
|
||||
userManagePage.jumpPage(); |
||||
//assert user manage page
|
||||
assert userManagePage.createUser(); |
||||
} |
||||
} |
@ -0,0 +1,58 @@
|
||||
# |
||||
# Licensed to the Apache Software Foundation (ASF) under one or more |
||||
# contributor license agreements. See the NOTICE file distributed with |
||||
# this work for additional information regarding copyright ownership. |
||||
# The ASF licenses this file to You under the Apache License, Version 2.0 |
||||
# (the "License"); you may not use this file except in compliance with |
||||
# the License. You may obtain a copy of the License at |
||||
# |
||||
# http://www.apache.org/licenses/LICENSE-2.0 |
||||
# |
||||
# Unless required by applicable law or agreed to in writing, software |
||||
# distributed under the License is distributed on an "AS IS" BASIS, |
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
# See the License for the specific language governing permissions and |
||||
# limitations under the License. |
||||
# |
||||
|
||||
############### project ############## |
||||
# login url |
||||
LOGIN_URL=http://ark1:12345/dolphinscheduler |
||||
#login username |
||||
USER_NAME=admin |
||||
#login password |
||||
PASSWORD=123456 |
||||
|
||||
############### web driver ############## |
||||
# driver path |
||||
driver.chromeDriver=/Users/chenxingchun/Documents/easyscheduler/selenium/chromeDriver |
||||
# implicitly wait(s) |
||||
driver.timeouts.implicitlyWait=10 |
||||
# show wait(s) |
||||
driver.timeouts.webDriverWait=10 |
||||
# page load timeout(s) |
||||
driver.timeouts.pageLoadTimeout=10 |
||||
# JS wait timeouts(s) |
||||
driver.timeouts.setScriptTimeout=10 |
||||
|
||||
|
||||
############### redis ############## |
||||
# redis ip |
||||
redis.ip=127.0.0.1 |
||||
# redis port |
||||
redis.port=6379 |
||||
# redis password |
||||
redis.pwd= |
||||
############### redis pool ############## |
||||
# jedis expireTime(s) |
||||
jedis.expireTime=3600 |
||||
# jedis maxTotal |
||||
jedis.pool.maxTotal=3000 |
||||
# jedis maxIdle |
||||
jedis.pool.maxIdle=1000 |
||||
# jedis maxWaitMillis |
||||
jedis.pool.maxWaitMillis=10000 |
||||
# jedis Whether to perform a valid check when calling the borrowObject method |
||||
jedis.pool.testOnBorrow=true |
||||
# jedis Whether to perform a valid check when calling the returnObject method |
||||
jedis.pool.testOnReturn=true |
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> |
||||
<suite name="e2e Test Suite" parallel="tests" thread-count="2"> |
||||
<!-- create tenant --> |
||||
<test name="create-tenant" preserve-order="true"> |
||||
<classes> |
||||
<class name="org.apache.dolphinscheduler.testcase.security.TenantManageTest"> |
||||
</class> |
||||
</classes> |
||||
</test> |
||||
<!-- create user --> |
||||
<test name="create-user" preserve-order="true"> |
||||
<classes> |
||||
<class name="org.apache.dolphinscheduler.testcase.security.UserManageTest"> |
||||
</class> |
||||
</classes> |
||||
</test> |
||||
</suite> |
@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?> |
||||
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > |
||||
<suite name="dolphinscheduler_e2e" parallel="false"> |
||||
<test name="dolphinscheduler_test"> |
||||
<!--<packages>--> |
||||
<!--<!–<package name="org.apache.dolphinscheduler.testcase.security.TenantManageTest"/>–>--> |
||||
<!--<package name="org.apache.dolphinscheduler.testcase.security.*"/>--> |
||||
<!--</packages>--> |
||||
<!--<classes>--> |
||||
<!--<class name="org.apache.dolphinscheduler.testcase.security.UserManageTest"></class>--> |
||||
<!--</classes>--> |
||||
</test> |
||||
|
||||
<!--<suite-files>--> |
||||
<!--<suite-file path="suite.xml"/>--> |
||||
<!--</suite-files>--> |
||||
|
||||
<listeners> |
||||
<listener class-name="org.uncommons.reportng.HTMLReporter" /> |
||||
<listener class-name="org.uncommons.reportng.JUnitXMLReporter" /> |
||||
</listeners> |
||||
</suite> |
Loading…
Reference in new issue