分布式调度框架。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

165 lines
5.1 KiB

/*
* 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.e2e.pages.project.workflow.task;
import lombok.Getter;
import org.apache.dolphinscheduler.e2e.pages.project.workflow.WorkflowForm;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.FindBys;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.pagefactory.ByChained;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration;
import java.util.List;
import java.util.stream.Stream;
@Getter
public abstract class TaskNodeForm {
@FindBys({
@FindBy(className = "input-node-name"),
@FindBy(tagName = "input")
})
private WebElement inputNodeName;
@FindBy(className = "btn-submit")
private WebElement buttonSubmit;
@FindBys({
@FindBy(className = "input-param-key"),
@FindBy(tagName = "input"),
})
private List<WebElement> inputParamKey;
@FindBys({
@FindBy(className = "input-param-value"),
@FindBy(tagName = "input"),
})
private List<WebElement> inputParamValue;
@FindBys({
@FindBy(className = "pre-tasks-model"),
@FindBy(className = "n-base-selection"),
})
private WebElement selectPreTasks;
@FindBys({
@FindBy(className = "env-select"),
@FindBy(className = "n-base-selection"),
})
private WebElement selectEnv;
@FindBys({
@FindBy(className = "btn-custom-parameters"),
@FindBy(tagName = "button"),
})
private WebElement buttonCustomParameters;
@FindBy(className = "btn-create-custom-parameter")
private WebElement buttonCreateCustomParameters;
private final WorkflowForm parent;
TaskNodeForm(WorkflowForm parent) {
this.parent = parent;
final WebDriver driver = parent.driver();
PageFactory.initElements(driver, this);
}
public TaskNodeForm name(String name) {
inputNodeName().sendKeys(name);
return this;
}
public TaskNodeForm addParam(String key, String value) {
assert inputParamKey().size() == inputParamValue().size();
final int len = inputParamKey().size();
final WebDriver driver = parent().driver();
if (len == 0) {
buttonCustomParameters().click();
inputParamKey().get(0).sendKeys(key);
inputParamValue().get(0).sendKeys(value);
} else {
buttonCreateCustomParameters().click();
inputParamKey().get(len).sendKeys(key);
inputParamValue().get(len).sendKeys(value);
}
return this;
}
public TaskNodeForm selectEnv(String envName){
((JavascriptExecutor)parent().driver()).executeScript("arguments[0].click();", selectEnv);
final By optionsLocator = By.className("n-base-selection-input__content");
new WebDriverWait(parent.driver(), Duration.ofSeconds(20))
.until(ExpectedConditions.visibilityOfElementLocated(optionsLocator));
List<WebElement> webElements = parent.driver().findElements(optionsLocator);
webElements.stream()
.filter(it -> it.getText().contains(envName))
.findFirst()
.orElseThrow(() -> new RuntimeException("No such envName: " + envName))
.click();
return this;
}
public TaskNodeForm preTask(String preTaskName) {
((JavascriptExecutor)parent().driver()).executeScript("arguments[0].click();", selectPreTasks);
final By optionsLocator = By.className("option-pre-tasks");
new WebDriverWait(parent.driver(), Duration.ofSeconds(20))
.until(ExpectedConditions.visibilityOfElementLocated(optionsLocator));
List<WebElement> webElements = parent.driver().findElements(optionsLocator);
webElements.stream()
.filter(it -> it.getText().contains(preTaskName))
.findFirst()
.orElseThrow(() -> new RuntimeException("No such task: " + preTaskName))
.click();
inputNodeName().click();
return this;
}
public WorkflowForm submit() {
buttonSubmit.click();
return parent();
}
}