如何在黄瓜中一次又一次地执行一个场景

问题描述 投票:1回答:1

我有一个功能文件,其中有两种情况。在第一次迭代之后,我希望再次执行这些场景。

我需要添加什么?我是否需要在步骤定义文件中复制相同的java代码,还是有其他方法?

特征文件::

@sanity 
Feature: To test Proscape Smoke Test 

Scenario: To launch the Proscape Application Mockup URL 
Given Open the chrome and launch the application 
When user enter url 
And click on Test Project  
And user clicks on Parameter button of Details page
Then Details Page should display  

Scenario Outline: Details page display
Given Details page is diplayed
When user enter value in first Fixture Type "<FF1>"
And user enter second Fixture Type "<FF2>"
And user enter third Fixture Type "<FF3>"
And user clicks on Next button 
Then Category Page should display

Examples:    
| FF1 | FF2 | FF3 |
|  a  | b   | c   |

StepDefinition:

@Given("^Open the chrome and launch the application$")
    public void open_the_chrome_and_launch_the_application() throws Exception {
        System. setProperty("webdriver.chrome.driver", "C:\\Mohini\\AutomationStart\\chromedriver.exe");
        driver= new ChromeDriver() ;
        driver.manage().window().maximize();
    }


@When("^user enter url$")
    public void user_enter_url() throws Exception {
        driver.get("http://t53umx.axshare.com/#g=1&p=home");
        driver.findElement(By.id("Password")).sendKeys("landg");
        Thread.sleep(5000); 
        driver.findElement(By.className("loginsubmit")).click();
        driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);    
    }

@When("^click on Test Project$")
    public void click_on_Test_Project() throws Exception {
        driver.switchTo().frame("mainFrame"); // use this if it's in frame and you don't know how to locate it
        WebElement element = (new WebDriverWait(driver, 100)).until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='u133_img']"))); 

        Actions action = new Actions(driver);

        action.moveToElement(element).click();
        Thread.sleep(5000); 
        //element.click();
        action.perform();
        driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS);    
    }

@When("^user clicks on Parameter button of Details page$")
    public void user_clicks_on_Parameter_button_of_Details_page() throws Exception {
        //driver.findElement(By.id("u47_div")).click();
        try {
            WebDriverWait wdw = new WebDriverWait(driver, 50);
            long startTime = System.currentTimeMillis();
            long endTime = System.currentTimeMillis();
            long pageLoadTime = (endTime - startTime);
            WebElement element = wdw.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='u47']"))); //we will not use div here in id 

            Actions action = new Actions(driver);
            action.moveToElement(element).build().perform();
            Thread.sleep(5000); 
            element.click();

            System.out.println(pageLoadTime);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

@Then("^Details Page should display$")
    public void details_Page_should_display() throws Exception {
        Thread.sleep(5000);     
    }

@Given("^Details page is diplayed$")
    public void details_page_is_diplayed() throws Exception {

    }

@When("^user enter value in first Fixture Type \"([^\"]*)\"$")
    public void user_enter_value_in_first_Fixture_Type(String arg1) throws Exception {
        WebDriverWait wdw1 = new WebDriverWait(driver, 50);
        WebElement element1 = wdw1.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='u68_input']"))); //we will not use div here in id 
        System.out.println("Ff1 = "+arg1);
        element1.sendKeys(arg1);
    }

@When("^user enter second Fixture Type \"([^\"]*)\"$")
    public void user_enter_second_Fixture_Type(String arg1) throws Exception {
        System.out.println("Ff2 = "+arg1);
        driver.findElement(By.xpath("//*[@id='u70_input']")).sendKeys(arg1);
        Thread.sleep(2000);
    }

@When("^user enter third Fixture Type \"([^\"]*)\"$")
    public void user_enter_third_Fixture_Type(String arg1) throws Exception {
        System.out.println("Ff3 = "+arg1);
        driver.findElement(By.xpath("//*[@id='u71_input']")).sendKeys(arg1);
        Thread.sleep(2000);
    }

@When("^user clicks on Next button$")
    public void user_clicks_on_Next_button() throws Exception {
        Select fixturetype= new Select(driver.findElement(By.xpath("//*[@id=\"u85_input\"]")));
        fixturetype.selectByVisibleText("LED");
        Select lamp= new Select(driver.findElement(By.xpath("//*[@id=\"u84_input\"]")));
        lamp.selectByVisibleText("1000W");
        driver.findElement(By.xpath("//*[@id=\"u82_text\"]")).click();
        Thread.sleep(2000);
        driver.findElement(By.xpath("//*[@id=\"u89_text\"]")).click();
        Thread.sleep(2000);
    }

@Then("^Category Page should display$")
    public void category_Page_should_display() throws Exception {
        //driver.switchTo().frame("mainFrame");
        WebDriverWait wdw = new WebDriverWait(driver, 300);
        WebElement element = wdw.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='u1041']"))); 
        element.click();
        Thread.sleep(5000);
        driver.findElement(By.xpath("//*[@id='u1197']")).click(); 
        Thread.sleep(5000);
        driver.findElement(By.xpath("//*[@id='u1117']")).click();
        Thread.sleep(5000);
        driver.findElement(By.xpath("//*[@id=\"u1113\"]")).click();
        Thread.sleep(2000);
        driver.findElement(By.xpath("//*[@id=\"u1137\"]")).click();
        Thread.sleep(2000);
        driver.findElement(By.xpath("//*[@id=\"u1215\"]")).click();
        Thread.sleep(2000);
        driver.findElement(By.xpath("//*[@id=\"u1138\"]")).click();
        Thread.sleep(2000);
        driver.findElement(By.xpath("//*[@id=\"u1114\"]")).click();
        Thread.sleep(2000);
    }
}
cucumber-jvm scenarios feature-file
1个回答
0
投票

如果要运行更多场景,可以在功能文件中添加它们。使用带有不同示例的Scenario Outline,可以非常轻松地添加其他测试用例。您可以通过在表中添加另一行来添加另一个示例,例如:

Examples:    
| FF1 | FF2 | FF3 |
|  a  | b   | c   |
|  d  | e   | f   |

从您的示例中,您似乎想要从第一个场景中断的位置(即,一旦您进入详细信息页面)运行第二个场景(场景大纲)。

如果第一个场景仅是第二个场景(或场景轮廓)的设置,则应将它们合并在一起,如下所示:

@sanity 
Feature: Proscape Smoke Test 

Scenario Outline: Details page display
Given the user opens the details page of the Test Project  
When user enter value in first Fixture Type "<FF1>"
And user enter second Fixture Type "<FF2>"
And user enter third Fixture Type "<FF3>"
And user clicks on Next button 
Then Category Page should display

Examples:    
| FF1 | FF2 | FF3 |
|  a  | b   | c   |
|  d  | e   | f   |

这里“给定用户打开测试项目的详细信息页面”应该像前面的步骤一样实现(打开应用程序URL并导航到详细信息页面)。

© www.soinside.com 2019 - 2024. All rights reserved.