希望有人能帮忙。
我已经完成了测试,但由于某种原因,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());
}
}
1条答案
按热度按时间lo8azlld1#
正如您在前面的评论中所提到的,您很可能将此作为junit测试而不是testng来运行,这就是为什么您的框架无法识别@aftermethod标记的原因。因为您使用的是cucumber(并且已经使用了@before标记),所以解决这个问题的最简单方法是使用cucumber@after标记。
你的方法在这里。
此外,对于您的特定情况,最好使用driver.quit()方法,而不是close。