java—使用eclipse运行maven的cucumber测试会导致多个chrome窗口打开,而不会关闭

5cnsuln7  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(394)

希望有人能帮忙。
我已经完成了测试,但由于某种原因,chrome会启动一个空白的浏览器页面,然后再启动一秒钟。第二个chrome窗口遵循了所有的步骤,但是忽略了after钩子来关闭浏览器/删除cookies等等。基本上,测试是运行的,但是我留下了一堆乱七八糟的东西来清理。
如何让chrome停止打开多个窗口,如何让它真正关闭浏览器?
下面是测试用例:

package CucumberFramework.stepsFiles;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterMethod;

import cucumber.api.java.Before;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;

public class Launchpad_Battery_Search{
        WebDriver driver;

        @Before
        public void setup() {
            this.driver = new ChromeDriver();
            this.driver.manage().window().maximize();
            this.driver.manage().timeouts().pageLoadTimeout(60, TimeUnit.SECONDS);
            this.driver.manage().timeouts().setScriptTimeout(60, TimeUnit.SECONDS);                     
        }
        @AfterMethod
        public void teardown() {
            this.driver.manage().deleteAllCookies();
            this.driver.close();
            this.driver = null; 
        }   
        @Given ("^user logs in$")
        public void user_logs_in() throws Throwable{
            driver.get("https://app.websitebeingtested.com");           
            Thread.sleep(4000);
            driver.findElement(By.xpath("//*[@id=\"ObservableObject@20.email\"]")).sendKeys("definitelyabetatester@gmail.com");
            driver.findElement(By.xpath("//*[@id=\"ObservableObject@20.password\"]")).sendKeys("BasicPass!23");
            driver.findElement(By.xpath("//span[text()='Sign In']")).click();
            Thread.sleep(6000);
        }   

        @Given ("^user clicks launchpad icon$")
        public void user_clicks_launchpad_icon() throws Throwable {
            driver.findElement(By.xpath("//a[@href='/agencyLaunchpad']")).click();
        }

        @Given ("^user searches launchpad for batteries$")
        public void user_searches_launchpad_for_batteries() throws Throwable {
            Thread.sleep(4000);
            driver.findElement(By.xpath("/html/body/div[1]/div[2]/div[3]/div/div[1]/div/input")).sendKeys("batteries");
            driver.findElement(By.xpath("//span[text()= 'Search']")).click();
            Thread.sleep(6000);
        }
        @Then ("^search returns applicable results$")
        public void search_returns_applicable_results() throws Throwable {
            WebElement GetAQuote = driver.findElement(By.xpath("//a[contains(text(), 'Get a Quote')]"));
            AssertJUnit.assertEquals(true, GetAQuote.isDisplayed());
        }

}
lo8azlld

lo8azlld1#

正如您在前面的评论中所提到的,您很可能将此作为junit测试而不是testng来运行,这就是为什么您的框架无法识别@aftermethod标记的原因。因为您使用的是cucumber(并且已经使用了@before标记),所以解决这个问题的最简单方法是使用cucumber@after标记。

import cucumber.api.java.After;

@After

你的方法在这里。
此外,对于您的特定情况,最好使用driver.quit()方法,而不是close。

相关问题