【发布时间】:2019-07-14 07:53:37
【问题描述】:
我有一个 Java 自动化脚本。我有一个有效的设置方法,但由于某种原因我的 tearDown 没有被读取。
当我运行自动化测试时,我似乎遇到了两个问题
- 如果多次运行测试失败并且浏览器窗口保持打开状态。
- 即使测试通过了浏览器窗口也永远不会关闭,这让事情变得非常混乱。
我没有为实际测试添加任何代码功能文件,因为我认为问题出在设置中,但我很乐意这样做。
我怀疑这两个问题是相关的,但我不知道在哪里或如何。
这是我的 SeleniumSetUp 类
public class SeleniumSetup {
protected WebDriver driver;
public SeleniumSetup(WebDriver driver)
{
}
public SeleniumSetup() {
}
public void prepareBrowserForSelenium() {
// setup();
if(DriverSingleton.getDriver() == null)
{
setup();
}
else
{
driver = DriverSingleton.getDriver();
}
}
public void setup() {
System.setProperty("webdriver.chrome.driver", "C:\\Users\\Selenium and drivers\\chromedriver.exe");
driver = new ChromeDriver();
driver.get("http://the-internet.herokuapp.com/");
driver.manage().window().maximize();
System.out.println("Set up running");
}
public void tearDown() {
driver.quit();
System.out.println("Tear down running");
}
}
我添加了一个 Println,并且可以看到当我运行我的脚本时它永远不会返回。
这是我的基本页面;
package pages;
import org.openqa.selenium.WebDriver;
public class BasePage {
protected WebDriver driver;
public BasePage(WebDriver driver) {
this.driver = driver;
}
}
还有我的司机
package support;
import org.openqa.selenium.WebDriver;
public class DriverSingleton {
private static WebDriver driver;
public DriverSingleton () {
}
public static WebDriver getDriver() {
return driver;
}
public static void setDriver (WebDriver driver) {
DriverSingleton.driver = driver;
}
}
任何帮助将不胜感激。
【问题讨论】:
-
将 sysout 放在您的拆卸方法中,在您执行退出的行之前。如果退出引发异常,您的 sysout 将永远不会被调用
-
我刚刚完成,再次运行我的脚本,输出中没有显示“tearDown”消息
-
我对 selenium 不太熟悉,但根据您使用的测试框架,您可以使用一些注释来确保调用 setup 和 teardown 方法。在 Junit 中有
@Before、@BeforeClass、@After或@AfterClass。我相信 TestNg 也有类似的注释。这是来自 Junit 的示例,ecanarys.com/Blogs/ArticleID/170/… -
我正在使用 Junit 并且在我的 tearDown 方法之前添加了 After 和 AfterClass 并且它没有产生任何影响
-
您确定您是通过 Junit 运行测试吗?一种简单的测试方法...如果您删除上面的
@test注释,您可以运行测试吗?如果你仍然可以运行你的测试,那可能意味着你没有正确使用测试运行器,这意味着它不会调用你用@Before或@After注释的方法如果你添加代码可能会有所帮助您尝试运行的示例测试。
标签: java selenium automation