当前位置: 首页 > 知识库问答 >
问题:

如何防止硒在每次测试运行时打开一个新的铬窗口?

和斌
2023-03-14

因此,我在一个react项目中使用selenium-webdriver运行selenium测试。每次我运行测试时,它都会打开一个新的chrome窗口,这非常令人恼火,因为我最终打开了一百万个chrome窗口。是否可能强制selenium使用已经打开的浏览器窗口?

编辑:这里有一个测试代码的简单示例。

const webdriver = require('selenium-webdriver');
const { By, Key } = webdriver

describe('Dashboard page', () => {

  it('renders correctly', async() => {
    var chromeCapabilities = webdriver.Capabilities.chrome();
    var chromeOptions = {
      //'args': ['--headless']
    };
    chromeCapabilities.set('chromeOptions', chromeOptions);
    const driver = new webdriver.Builder().withCapabilities(chromeCapabilities).build();

    await driver.get('http://localhost:3000/dashboard')

    await driver.getTitle().then((title) => {
      expect(title).toEqual("My website | Dashboard")
    })

    await driver.getCurrentUrl().then((url) => {
      expect(url).toEqual("http://localhost:3000/dashboard")
    })
  })
})

共有1个答案

公沈义
2023-03-14

如果您使用Jasmine框架的javascript绑定,那么您可以尝试使用下面的代码。您也可以在这里参考jasmin docs以获得更多细节

在此之前,对于spec.js中的所有测试,每个测试只运行一次

在每个之前启动浏览器会话

 describe('Before Each Spec', function () {
  beforeEach(function () {
  // Create new browser instance once for all spec tests
    var chromeCapabilities = webdriver.Capabilities.chrome();
    var chromeOptions = {
      //'args': ['--headless']
    };
    chromeCapabilities.set('chromeOptions', chromeOptions);
    const driver = new webdriver.Builder().withCapabilities(chromeCapabilities).build();

  });


describe('Test Method 1', function() {
  it('should have a title', function() {
    // TO DO Code
  });
});

describe('Test Method 2', function() {
  it('should have a something to test', function() {
    // TO DO Code
  });
});

describe('After Each Spec', function () {
  afterEach(function () {
  // Destroy browser after all tests finished
   browser.quit(); (or browser.driver.close();)

  });
@BeforeSuite
public void setUP(){
startSeleniumSession();
}

public void startSeleniumSession(){
WebDriver driver = new ChromeDriver();
}

@Test
public void startTest2(){
driver.get("some url 1");
driver.findElement(By.id("someID")).click()
}


@Test
public void startTest2(){
// this test will run in same browser
driver.get("some url 2");
driver.findElement(By.id("someID")).click()
}

@AfterSuite
public void tearDown(){
driver.quit();
}
 类似资料:
  • 这是我的Java代码: 当我运行它时,会出现以下错误: 我正在使用IntelliJ,安装了chrome驱动程序,但没有解决它,所以任何人都知道这个问题的解决方案??

  • 我已经添加了一个actionlistener到一个jmenuproject,它调用一个类,该类读取一个excel文件并在一个jframe中打开一个jgraph。我还添加了另一个actionlistener到不同的jmenuproject,为相同的exel文件调用相同的类,但不同的excel表(不同的int参数)。然而,当我运行我的主框架时,我点击菜单项,我一次只能打开其中一个。我必须关上一个来打开

  • 如果我直接在docker中运行google-chrome,它会显示如下: 系统:

  • 问题内容: 我想依次运行每个选定的py.test项目任意次。 我没有看到任何标准的py.test机制来执行此操作。 我试图做到这一点。我修改了传入的项目列表,以多次指定每个项目。测试项目的第一次执行可以按预期工作,但是这似乎对我的代码造成了一些问题。 此外,我希望每次运行都具有唯一的测试项目对象,因为我在各种报告代码中都使用id(项目)作为键。不幸的是,我找不到任何py.test代码来复制测试项目

  • 我想在Jenkins中运行Selenium Webdriver Maven测试。我遵循了教程:https://www.guru99.com/maven-jenkins-with-selenium-complete-tutorial.html和https://www.safaribooksonline.com/library/view/jenkins-the-definitive/978144931

  • 这真的很烦人,还有人面对过这个问题吗?有解决办法吗?