如何防止硒在每次测试中打开新的铬窗口?

时间:2018-09-06 10:11:40

标签: selenium selenium-webdriver

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

enter image description here

编辑: 这是测试代码的简单示例。

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")
    })
  })
})

2 个答案:

答案 0 :(得分:1)

如果您在Jasmine框架中使用javascript绑定,则可以尝试使用以下代码。您还可以参考jasmin文档以获取更多详细信息here

beforeEach将仅对spec.js中的所有测试运行一次

  
    

在beforeEach中启动浏览器会话

  

afterEach将对spec.js中的所有测试运行一次

  
    

在AfterEach中结束浏览器会话

  
 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();)

  });

如果您使用的是Java,则可以使用以下注释,该注释对于完整的testng xml仅运行一次,对于每个testng类仅运行一次,例如@BeforeSuite或@BeforeClass

@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();
}

答案 1 :(得分:0)

此设置对我有用:

options = Options()
options.add_argument('--headless')
options.add_argument('--profile-directory=Default') 
browser = webdriver.Chrome(options=options,executable_path='./chromedriver/chromedriver.exe')

关键是要设置:

options.add_argument('--profile-directory=Default')