Add e2e to create workflow case (#2027)
* add e2e * add ui-test * add e2e license and notice * add e2e license * add license * add ui-test * add ui-test * add ui-test * e2e delete dolphinscheduler parent project dependency * add ui-test * dolphinscheduler_dist delete e2e license/notice * dolphinscheduler_dist delete e2e license/notice * dolphinscheduler_dist delete e2e license/notice * dolphinscheduler_dist delete e2e license/notice * pom.xml delete e2e dependency * add e2e create workflow * Merge remote-tracking branch 'upstream/dev' into dev # Conflicts: # e2e/src/test/java/org/apache/dolphinscheduler/base/BaseDriver.java * Merge remote-tracking branch 'upstream/dev' into dev # Conflicts: # e2e/src/test/java/org/apache/dolphinscheduler/base/BaseDriver.java * Merge remote-tracking branch 'upstream/dev' into dev # Conflicts: # e2e/src/test/java/org/apache/dolphinscheduler/base/BaseDriver.java * Merge remote-tracking branch 'upstream/dev' into dev # Conflicts: # e2e/src/test/java/org/apache/dolphinscheduler/base/BaseDriver.java * modify workflow case Co-authored-by: chenxingchun <50446296+chenxingchun@users.noreply.github.com>
This commit is contained in:
parent
ee3c0aedc8
commit
f407adcb71
|
|
@ -27,6 +27,7 @@ import java.io.IOException;
|
|||
import java.util.concurrent.TimeUnit;
|
||||
import org.openqa.selenium.PageLoadStrategy;
|
||||
|
||||
|
||||
/**
|
||||
* base driver class
|
||||
*/
|
||||
|
|
@ -97,8 +98,13 @@ public class BaseDriver {
|
|||
/* driver setting wait time */
|
||||
// implicitly wait time
|
||||
driver.manage().timeouts().implicitlyWait(implicitlyWait, TimeUnit.SECONDS);
|
||||
|
||||
// page load timeout
|
||||
driver.manage().timeouts().pageLoadTimeout(pageLoadTimeout, TimeUnit.SECONDS);
|
||||
|
||||
// page load timeout
|
||||
driver.manage().timeouts().pageLoadTimeout(pageLoadTimeout, TimeUnit.SECONDS);
|
||||
|
||||
// script timeout
|
||||
driver.manage().timeouts().setScriptTimeout(setScriptTimeout, TimeUnit.SECONDS);
|
||||
|
||||
|
|
|
|||
|
|
@ -99,8 +99,6 @@ public class BrowserCommon {
|
|||
// show wait timeout
|
||||
long timeout = Long.valueOf(PropertiesReader.getKey("driver.timeouts.webDriverWait"));
|
||||
wait = new WebDriverWait(driver, timeout);
|
||||
// this.redisUtil = redisUtil;
|
||||
// this.jedis = redisUtil.getJedis();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -158,22 +156,34 @@ public class BrowserCommon {
|
|||
*
|
||||
* @param locator By
|
||||
*/
|
||||
public void clearInput(By locator) {
|
||||
public WebElement clearInput(By locator) {
|
||||
WebElement clearElement = locateElement(locator);
|
||||
clearElement.click();
|
||||
clearElement.clear();
|
||||
clearElement.sendKeys(Keys.chord(Keys.CONTROL, "a"));
|
||||
clearElement.sendKeys(Keys.DELETE);
|
||||
clearElement.sendKeys(Keys.BACK_SPACE);
|
||||
return clearElement;
|
||||
}
|
||||
|
||||
/**
|
||||
* input codeMirror
|
||||
*
|
||||
* @param codeMirrorLocator By codeMirror
|
||||
* @param codeMirrorLineLocator By codeMirrorLine
|
||||
|
||||
*/
|
||||
public void inputCodeMirror(By codeMirrorLocator,By codeMirrorLineLocator,String content) {
|
||||
WebElement codeMirrorElement = locateElement(codeMirrorLocator);
|
||||
WebElement codeMirrorLineElement = locateElement(codeMirrorLineLocator);
|
||||
codeMirrorElement.click();
|
||||
codeMirrorLineElement.sendKeys(content);
|
||||
}
|
||||
|
||||
/**
|
||||
* move to element
|
||||
*
|
||||
* @param locator BY
|
||||
* @return actions
|
||||
*/
|
||||
public Actions moveToElement(By locator) {
|
||||
public Actions moveToElement(By locator){
|
||||
return actions.moveToElement(locateElement(locator));
|
||||
}
|
||||
|
||||
|
|
@ -182,13 +192,17 @@ public class BrowserCommon {
|
|||
*
|
||||
* @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);
|
||||
public void dragAndDrop(By source_locator, By target_locator){
|
||||
WebElement sourceElement = locateElement(source_locator);
|
||||
WebElement targetElement = locateElement(target_locator);
|
||||
actions.dragAndDrop(sourcetElement, targetElement).moveToElement(targetElement, X, Y).perform();
|
||||
actions.dragAndDrop(sourceElement, targetElement).perform();
|
||||
actions.release();
|
||||
}
|
||||
|
||||
public void moveToDragElement(By target_locator, int X, int Y){
|
||||
WebElement targetElement = locateElement(target_locator);
|
||||
actions.dragAndDropBy(targetElement, X, Y).perform();
|
||||
actions.release();
|
||||
}
|
||||
|
||||
|
|
@ -300,6 +314,13 @@ public class BrowserCommon {
|
|||
executeScript("window.scrollTo(0, document.body.scrollHeight)");
|
||||
}
|
||||
|
||||
public void scrollToElementBottom() {
|
||||
|
||||
WebElement webElement = driver.findElement(By.xpath("/html/body/div[4]/div/div[2]/div/div[2]/div/div[7]/div[3]"));
|
||||
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", webElement);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Page swipe makes the top of the element align with the top of the page
|
||||
*
|
||||
|
|
|
|||
|
|
@ -29,8 +29,18 @@ public class CreatWorkflowData {
|
|||
//input shell script
|
||||
public static final String SHELL_SCRIPT = "echo 1111111";
|
||||
|
||||
//input custom parameters
|
||||
public static final String INPUT_CUSTOM_PARAMETERS = "selenium_parameter";
|
||||
|
||||
//input custom parameters value
|
||||
public static final String INPUT_CUSTOM_PARAMETERS_VALUE = "selenium_parameter_123";
|
||||
|
||||
//input add custom parameters
|
||||
public static final String INPUT_ADD_CUSTOM_PARAMETERS = "selenium_parameter_delete";
|
||||
|
||||
//input add custom parameters value
|
||||
public static final String INPUT_ADD_CUSTOM_PARAMETERS_VALUE = "selenium_parameter_delete_456";
|
||||
|
||||
//create workflow title
|
||||
public static final String WORKFLOW_TITLE = "创建流程定义 - DolphinScheduler";
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,9 +20,6 @@ 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");
|
||||
|
||||
|
|
@ -33,16 +30,13 @@ public class CreateWorkflowLocator {
|
|||
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");
|
||||
public static final By MOUSE_DOWN_AT_SHELL = By.xpath("//div[@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");
|
||||
public static final By MOUSE_MOVE_SHELL_AT_DAG = By.xpath("//div[@id='canvas']");
|
||||
|
||||
//input shell task _name
|
||||
public static final By INPUT_SHELL_TASK_NAME = By.xpath("//input");
|
||||
|
|
@ -89,9 +83,33 @@ public class CreateWorkflowLocator {
|
|||
//input timeout
|
||||
public static final By SELECT_TIMEOUT = By.xpath("//div[3]/div[2]/label/div/input");
|
||||
|
||||
//click codeMirror
|
||||
public static final By CLICK_CODE_MIRROR = By.xpath("//div[5]/div/pre");
|
||||
|
||||
//input script
|
||||
public static final By INPUT_SCRIPT = By.xpath("//div[2]/div/div/div/div/div/textarea");
|
||||
|
||||
//click custom parameters
|
||||
public static final By CLICK_CUSTOM_PARAMETERS = By.xpath("//span/a/em");
|
||||
|
||||
//input custom parameters
|
||||
public static final By INPUT_CUSTOM_PARAMETERS = By.xpath("//div[2]/div/div/div/div/div/input");
|
||||
|
||||
//input custom parameters value
|
||||
public static final By INPUT_CUSTOM_PARAMETERS_VALUE = By.xpath("//div[2]/input");
|
||||
|
||||
//click add custom parameters
|
||||
public static final By CLICK_ADD_CUSTOM_PARAMETERS = By.xpath("//span[2]/a/em");
|
||||
|
||||
//input add custom parameters
|
||||
public static final By INPUT_ADD_CUSTOM_PARAMETERS = By.xpath("//div[2]/div/div/div/div[2]/div/input");
|
||||
|
||||
//input add custom parameters value
|
||||
public static final By INPUT_ADD_CUSTOM_PARAMETERS_VALUE = By.xpath("//div[2]/div[2]/input");
|
||||
|
||||
//delete custom parameters
|
||||
public static final By CLICK_DELETE_CUSTOM_PARAMETERS = By.xpath("//div[2]/span/a/em");
|
||||
|
||||
//click submit button
|
||||
public static final By CLICK_SUBMIT_BUTTON = By.xpath("//button[2]/span");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,9 +29,10 @@ public class CreateProjectPage extends PageCommon {
|
|||
/**
|
||||
* jump page
|
||||
*/
|
||||
public void jumpPage() throws InterruptedException {
|
||||
public void jumpProjectManagePage() throws InterruptedException {
|
||||
Thread.sleep(TestConstant.ONE_THOUSANG);
|
||||
clickElement(CreateProjectLocator.PROJECT_MANAGE);
|
||||
Thread.sleep(TestConstant.ONE_THOUSANG);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -40,7 +41,6 @@ public class CreateProjectPage extends PageCommon {
|
|||
* @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);
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ 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;
|
||||
|
||||
|
|
@ -30,24 +29,23 @@ public class CreateWorkflowPage extends PageCommon {
|
|||
/**
|
||||
* jump page
|
||||
*/
|
||||
public boolean CreateWorkflow() throws InterruptedException {
|
||||
Thread.sleep(TestConstant.ONE_THOUSANG);
|
||||
// click project manage
|
||||
clickElement(CreateProjectLocator.PROJECT_MANAGE);
|
||||
Thread.sleep(TestConstant.ONE_THOUSANG);
|
||||
|
||||
public boolean createWorkflow() throws InterruptedException {
|
||||
// click project name
|
||||
clickElement(CreateWorkflowLocator.CLICK_PROJECT_NAME);
|
||||
Thread.sleep(TestConstant.ONE_THOUSANG);
|
||||
|
||||
|
||||
// click workflow define
|
||||
clickElement(CreateWorkflowLocator.CLICK_WORKFLOW_DEFINE);
|
||||
Thread.sleep(TestConstant.ONE_THOUSANG);
|
||||
|
||||
// click create workflow button
|
||||
clickElement(CreateWorkflowLocator.CLICK_CREATE_WORKFLOW_BUTTON);
|
||||
Thread.sleep(TestConstant.ONE_THOUSANG);
|
||||
|
||||
//drag shell_task
|
||||
dragAndDropBy(CreateWorkflowLocator.MOUSE_DOWN_AT_SHELL,CreateWorkflowLocator.MOUSE_MOVE_SHELL_AT_DAG, 3 ,6);
|
||||
dragAndDrop(CreateWorkflowLocator.MOUSE_DOWN_AT_SHELL,CreateWorkflowLocator.MOUSE_MOVE_SHELL_AT_DAG);
|
||||
|
||||
//input shell task _name
|
||||
sendInput(CreateWorkflowLocator.INPUT_SHELL_TASK_NAME , CreatWorkflowData.SHELL_TASK_NAME);
|
||||
|
|
@ -55,11 +53,9 @@ public class CreateWorkflowPage extends PageCommon {
|
|||
//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);
|
||||
|
||||
|
|
@ -93,15 +89,48 @@ public class CreateWorkflowPage extends PageCommon {
|
|||
//select timeout alarm
|
||||
clickElement(CreateWorkflowLocator.SELECT_TIMEOUT_ALARM);
|
||||
|
||||
//clear input
|
||||
//clear timeout
|
||||
clearInput(CreateWorkflowLocator.SELECT_TIMEOUT);
|
||||
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);
|
||||
//click codeMirror and input script
|
||||
inputCodeMirror(CreateWorkflowLocator.CLICK_CODE_MIRROR, CreateWorkflowLocator.INPUT_SCRIPT,CreatWorkflowData.SHELL_SCRIPT);
|
||||
scrollToElementBottom();
|
||||
Thread.sleep(TestConstant.ONE_THOUSANG);
|
||||
|
||||
//click custom parameters
|
||||
clickElement(CreateWorkflowLocator.CLICK_CUSTOM_PARAMETERS);
|
||||
|
||||
//input custom parameters
|
||||
sendInput(CreateWorkflowLocator.INPUT_CUSTOM_PARAMETERS, CreatWorkflowData.INPUT_CUSTOM_PARAMETERS);
|
||||
|
||||
//input custom parameters value
|
||||
sendInput(CreateWorkflowLocator.INPUT_CUSTOM_PARAMETERS_VALUE, CreatWorkflowData.INPUT_CUSTOM_PARAMETERS_VALUE);
|
||||
|
||||
//click add custom parameters
|
||||
clickElement(CreateWorkflowLocator.CLICK_ADD_CUSTOM_PARAMETERS);
|
||||
|
||||
scrollToElementBottom();
|
||||
Thread.sleep(TestConstant.ONE_THOUSANG);
|
||||
|
||||
//input add custom parameters
|
||||
sendInput(CreateWorkflowLocator.INPUT_ADD_CUSTOM_PARAMETERS,CreatWorkflowData.INPUT_ADD_CUSTOM_PARAMETERS);
|
||||
|
||||
//input add custom parameters value
|
||||
sendInput(CreateWorkflowLocator.INPUT_ADD_CUSTOM_PARAMETERS_VALUE,CreatWorkflowData.INPUT_ADD_CUSTOM_PARAMETERS_VALUE);
|
||||
|
||||
//click delete custom parameters
|
||||
clickElement(CreateWorkflowLocator.CLICK_DELETE_CUSTOM_PARAMETERS);
|
||||
Thread.sleep(TestConstant.ONE_THOUSANG);
|
||||
|
||||
//click submit button
|
||||
clickElement(CreateWorkflowLocator.CLICK_SUBMIT_BUTTON);
|
||||
Thread.sleep(TestConstant.ONE_THOUSANG);
|
||||
|
||||
moveToDragElement(CreateWorkflowLocator.MOUSE_MOVE_SHELL_AT_DAG,-300,-100);
|
||||
|
||||
return ifTitleContains(CreatWorkflowData.WORKFLOW_TITLE);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ public class CreateProjectTest extends BaseTest {
|
|||
public void testUserManage() throws InterruptedException {
|
||||
createProjectPage = new CreateProjectPage(driver);
|
||||
// enter user manage page
|
||||
createProjectPage.jumpPage();
|
||||
createProjectPage.jumpProjectManagePage();
|
||||
//assert user manage page
|
||||
assert createProjectPage.createProject();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,18 +17,21 @@
|
|||
package org.apache.dolphinscheduler.testcase.project;
|
||||
|
||||
import org.apache.dolphinscheduler.base.BaseTest;
|
||||
import org.apache.dolphinscheduler.page.project.CreateProjectPage;
|
||||
import org.apache.dolphinscheduler.page.project.CreateWorkflowPage;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
public class CreateWorkflowTest extends BaseTest {
|
||||
private CreateWorkflowPage createWorkflowPage;
|
||||
private CreateProjectPage createProjectPage;
|
||||
|
||||
|
||||
@Test(description = "CreateWorkflowTest", priority = 1)
|
||||
public void CreateWorkflowTest() throws InterruptedException {
|
||||
createProjectPage = new CreateProjectPage(driver);
|
||||
createProjectPage.jumpProjectManagePage();
|
||||
createWorkflowPage = new CreateWorkflowPage(driver);
|
||||
// enter user manage page
|
||||
// createWorkflowPage.jumpPage();
|
||||
//assert user manage page
|
||||
assert createWorkflowPage.CreateWorkflow();
|
||||
//assert create workflow
|
||||
assert createWorkflowPage.createWorkflow();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue