Как предотвратить селен, чтобы открывать новое окно Chrome при каждом запуске теста? - PullRequest
0 голосов
/ 06 сентября 2018

Итак, я запускаю тесты на селен с помощью selenium-webdriver в реактивном проекте. Каждый раз, когда я запускаю тесты, открывается новое хромированное окно, что очень раздражает, так как в итоге у меня открывается миллион хромированных окон. Можно ли заставить селен использовать уже открытое окно браузера?

enter image description here

EDIT: Вот простой пример тестового кода.

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 голосов
/ 21 февраля 2019

Эти настройки у меня сработали:

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') 
0 голосов
/ 06 сентября 2018

Если вы используете привязки JavaScript с Jasmine Framework, вы можете попробовать использовать приведенный ниже код. Вы также можете обратиться к документам jasmin для получения более подробной информации здесь

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, то можете использовать аннотацию ниже, которая выполняется только один раз для полного тестирования XML или один раз для каждого класса тестирования, например, @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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...