Как отформатировать несколько операторов if if в методы public static void в Java-проекте Selen - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть Java-код с множеством операторов IF Else в одном методе.Ниже приведен пример.Как мне преобразовать их в отдельные методы, мне нужно преобразовать эти операторы IF Else в методы, и я должен использовать эти переработанные методы в моем StepDefinition в среде Cucumber-Selenium.

Может кто-нибудь помочь мне с этим...

else if(action.equals("Load"))
{
Reporter.log(description+"|"+data);
driver.get(data);
if(!TestBase.browserName.equals("Chrome"))
{
driver.manage().window().maximize();
screenSize=driver.manage().window().getSize().toString();
System.out.println("My screensize is "+screenSize);
}

}else if(action.equals("RefreshPage"))
{
driver.navigate().refresh();                         
wait.until(ExpectedConditions.visibilityOfElementLocated(                        
By.xpath("//span[contains(text(),'salesforce.com, inc. All rights 
reserved.')]")));
}

else if(action.equals("InsertData"))
{
Reporter.log(description+"|"+data);
moveToElement(elementReference, referenceValue);
findElement(elementReference, referenceValue).click();
findElement(elementReference, referenceValue).clear();

if (description.toLowerCase().contains("request name")||                         
referenceValue.contains("reqNme")){
String customNum=getDate("requestName");
findElement(elementReference, referenceValue).sendKeys(data+customNum);
System.out.println("Request Name is "+data+customNum);
} else {
findElement(elementReference, referenceValue).sendKeys(data);
}
}
else if(action.equals("uploadFile"))
{
File file = new File(data);
String filePath=file.getAbsolutePath();
System.out.println(filePath);
findElement(elementReference, referenceValue).clear();
findElement(elementReference, referenceValue).sendKeys(filePath);
}
else if(action.equals("uploadImage"))
{
Reporter.log(description+"||"+data);
uploadImage(elementReference, referenceValue, "Logo", new File(data));
}
else if(action.equals("waitElVisibility"))
{
wait = new WebDriverWait(driver,Long.parseLong(data));
wait.until(ExpectedConditions.visibilityOf(findElement(elementReference, 
referenceValue)));
}
else if(action.equals("waitElInVisibility"))
{
wait = new WebDriverWait(driver,Long.parseLong(data));
wait.until(ExpectedConditions.invisibilityOfElementLocated(
By.xpath(referenceValue)));
}

Мне нужно создать метод для этих операторов If Else - Загрузить RefreshPage InsertData uploadFile waitElVisibility waitElInVisibility

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Вы можете разделить содержимое if-else на несколько методов, и если вы хотите избавиться от if-else, то альтернативой является использование оператора switch.См. Код ниже:

public class PublicStaticVoids {

    private static WebDriver driver;
    private static WebDriverWait wait;

    private static void loadThePage(String description, String data) {
        Reporter.log(description+"|"+data);
        driver.get(data); // Initialize the driver before doing this
        if(!TestBase.browserName.equals("Chrome"))
        {
            driver.manage().window().maximize();
            String screenSize = driver.manage().window().getSize().toString();
            System.out.println("My screensize is "+screenSize);
        }
    }

    private static void refreshThePage(String description, String data, WebElement elementReference, String referenceValue) {
        Reporter.log(description+"|"+data);
        moveToElement(elementReference, referenceValue);
        findElement(elementReference, referenceValue).click();
        findElement(elementReference, referenceValue).clear();

        if (description.toLowerCase().contains("request name")||                         
                referenceValue.contains("reqNme")){
            String customNum = getDate("requestName");
            findElement(elementReference, referenceValue).sendKeys(data+customNum);
            System.out.println("Request Name is "+data+customNum);
        } else {
            findElement(elementReference, referenceValue).sendKeys(data);
        }
    }

    private static void uploadTheFile(String data, WebElement elementReference, String referenceValue) {
        File file = new File(data);
        String filePath=file.getAbsolutePath();
        System.out.println(filePath);
        findElement(elementReference, referenceValue).clear();
        findElement(elementReference, referenceValue).sendKeys(filePath);
    }

    private static void uploadTheImage(String description, String data, WebElement elementReference, String referenceValue) {
        Reporter.log(description+"||"+data);
        uploadImage(elementReference, referenceValue, "Logo", new File(data));
    }

    private static void waitForVisibility(String data, WebElement elementReference, String referenceValue) {
        wait = new WebDriverWait(driver,Long.parseLong(data));
        wait.until(ExpectedConditions.visibilityOf(findElement(elementReference, referenceValue)));
    }

    private static void waitForInVisibility(String data, String referenceValue) {
        wait = new WebDriverWait(driver,Long.parseLong(data));
        wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath(referenceValue)));
    }

    public static void main(String... ali) {
        String action = "some action";
        switch(action) {
        case "Load":
            loadThePage("some description", "some data");
            break;
        case "RefreshPage":
            refreshThePage("description", "data", "someValue", "someValue"));
            break;
        case "uploadFile":
            uploadTheFile("someData", "someReference", "some value");
            break;
        case "uploadImage":
            uploadTheImage("description", "data", "Some Reference", "some value");
            break;
        case "waitELVisibility":
            waitForVisibility("data", "some ref", "some value");
            break;
        case "waitElInvisibility":
            waitForInvisibility("data", "some value");
            break;
        }
    }
}

Вы можете использовать эти методы снова, когда хотите, передавая значения в качестве параметров.Если вы не хотите передавать значения в качестве параметров, удалите их, а затем объявите и инициализируйте эти переменные со статическим ключевым словом над методами, и вы сможете использовать его внутри метода позже.

Ниже приведен соответствующий if-else условия для вышеприведенных операторов switch-case:

if(action.equals("Load"))
{
    loadThePage("some description", "some data");
}
else if(action.equals("RefreshPage"))
{
    refreshThePage("description", "data", "someValue", "someValue"));
}
else if(action.equals("uploadFile"))
{
    uploadTheFile("someData", "someReference", "some value");
}
else if(action.equals("uploadImage"))
{
    uploadTheImage("description", "data", "Some Reference", "some value");
}
else if(action.equals("waitELVisibility"))
{
    waitForVisibility("data", "some ref", "some value");
}
else if(action.equals("waitElInvisibility"))
{
    waitForInvisibility("data", "some value");
}

Надеюсь, это поможет ...

0 голосов
/ 06 февраля 2019

В общем, я бы не использовал статические методы.Для примера я сделал их статическими и предположил, что все объекты доступны (все переменные класса).Также я не реализовал все методы - только схематично:

public static void main(String[] args){
    //...

    // i would use a switch for the dispatch
    switch(action){
      case "Load": handleLoad(); break;
      case "RefreshPage": handeRefreshPage(); break;
      case "InsertData" : insertData(); break;
      // ...
    }

    //...
}

// define the handlers for the actions as individual methods:

public static void handleLoad(){
    Reporter.log(description+"|"+data);
    driver.get(data);
    if(!TestBase.browserName.equals("Chrome")){
        driver.manage().window().maximize();
        screenSize=driver.manage().window().getSize().toString();
        System.out.println("My screensize is "+screenSize);
    }

}

public static void handleRefreshPage(){
    driver.navigate().refresh();                         
    wait.until(ExpectedConditions.visibilityOfElementLocated(                        
    By.xpath("//span[contains(text(),'salesforce.com, inc. All rights reserved.')]")));  
}

// and so on
0 голосов
/ 06 февраля 2019

Вы можете создать отдельные методы в классе для любого другого условия, так что если в будущем вам нужно будет снова выполнить эти действия, вы можете напрямую использовать метод и выполнить действие.Сейчас я использую модификатор закрытого доступа, но вы можете сделать его общедоступным, если вы хотите использовать этот метод и вне класса.И вместо использования else if вы должны использовать switch, чтобы в будущем, если в игру вступало какое-либо другое действие, просто добавьте его в условие switch.

Ваш код должен выглядеть примерно так:

 public class ActionClass{

 // Making all methods for the actions you need to perform
 private static void loadData(){
    Reporter.log(description+"|"+data);
    driver.get(data);
    if(!TestBase.browserName.equals("Chrome"))
    {
    driver.manage().window().maximize();
    screenSize=driver.manage().window().getSize().toString();
    System.out.println("My screensize is "+screenSize);
    }       
}

private static void refreshPage(){
    driver.navigate().refresh();                         
    wait.until(ExpectedConditions.visibilityOfElementLocated(                        
    By.xpath("//span[contains(text(),'salesforce.com, inc. All rights 
    reserved.')]")));
}


private static void insertData(){
    Reporter.log(description+"|"+data);
    moveToElement(elementReference, referenceValue);
    findElement(elementReference, referenceValue).click();
    findElement(elementReference, referenceValue).clear();

    if (description.toLowerCase().contains("request name")||                         
    referenceValue.contains("reqNme")){
    String customNum=getDate("requestName");
    findElement(elementReference, referenceValue).sendKeys(data+customNum);
    System.out.println("Request Name is "+data+customNum);
    } else {
    findElement(elementReference, referenceValue).sendKeys(data);
    }
}


private static void uploadFile(){
    File file = new File(data);
    String filePath=file.getAbsolutePath();
    System.out.println(filePath);
    findElement(elementReference, referenceValue).clear();
    findElement(elementReference, referenceValue).sendKeys(filePath);
}

private static void uploadImageAction(){
    Reporter.log(description+"||"+data);
    uploadImage(elementReference, referenceValue, "Logo", new File(data));

}

private static void waitElVisibility(){
    wait = new WebDriverWait(driver,Long.parseLong(data));
    wait.until(ExpectedConditions.visibilityOf(findElement(elementReference, 
    referenceValue)));

}

private static void waitElInvisibility(){
    wait = new WebDriverWait(driver,Long.parseLong(data));
    wait.until(ExpectedConditions.invisibilityOfElementLocated(
    By.xpath(referenceValue)));

}

// The main method where switch condition will be present
    public static void main(String[] args) {
// Initialise the action string according to your code
    String action = null;
    switch (action) {
    case ("Load"):
        loadData();
        break;
    case ("RefreshPage"):
        refreshPage();
        break;

    case ("InsertData"):
        insertData();
        break;

    case ("uploadFile"):
        uploadFile();
        break;

    case ("uploadImage"):
        uploadImageAction();
        break;

    case ("waitElVisibility"):
        waitElVisibility();
        break;

    case ("waitElInVisibility"):
        waitElInvisibility();
        break;

    default:
        System.out.println("Action did not match");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...