Конвейер GOCD, размер окна Selenium ChromeDriver не задан

При установке размера окна для хрома на максимальный или 1980x1080 с использованием

ChromeOptions.addArguments("--start-maximized");

or

driver.manage().window().setSize(new Dimension(1980,1080));

or

ChromeOptions.addArguments("window-size=1980,1080");

or

ChromeOptions.addArguments("--window-size=1980,1080");

окно Chrome настроено на правильный размер и отлично работает при запуске тестов либо с терминала, либо при запуске отдельных тестовых случаев из intellij (все тесты проходят)

Однако, когда мой конвейер GOCD подхватывает задание, все начинает работать (тесты начинают выполняться нормально), затем в журнале я вижу, что окно, используемое в тесте, имеет размер 1044 x 788.

Это вызывает проблему, так как кнопка, которая мне нужна, находится справа и вне поля зрения из-за размера экрана (я полагаю)

полученное сообщение

    2018-11-28 13:38:52.542  WARN 4456 --- [           main] utils.PageUtils                          : element not interactable
  (Session info: chrome=70.0.3538.110)
  (Driver info: chromedriver=2.44.609538 (b655c5a60b0b544917107a59d4153d4bf78e1b90),platform=Windows NT 10.0.17134 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds
Build info: version: '3.9.1', revision: '63f7b50', time: '2018-02-07T22:25:02.294Z'
System info: host: 'DEV', ip: '192.168.1.177', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_191'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, acceptSslCerts: false, applicationCacheEnabled: false, browserConnectionEnabled: false, browserName: chrome, chrome: {chromedriverVersion: 2.44.609538 (b655c5a60b0b54..., userDataDir: C:\windows\TEMP\scoped_dir1...}, cssSelectorsEnabled: true, databaseEnabled: false, goog:chromeOptions: {debuggerAddress: localhost:62401}, handlesAlerts: true, hasTouchScreen: false, javascriptEnabled: true, locationContextEnabled: true, mobileEmulationEnabled: false, nativeEvents: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, rotatable: false, setWindowRect: true, takesHeapSnapshot: true, takesScreenshot: true, unexpectedAlertBehaviour: ignore, unhandledPromptBehavior: ignore, version: 70.0.3538.110, webStorageEnabled: true}
Session ID: e3f442486d9087e190e0954c5fcc19f5: Click(btnSearchDropMenu) failed! re trying...
2018-11-28 13:38:52.549  WARN 4456 --- [           main] utils.PageUtils                          : Screen dimentions: (1044, 788)
2018-11-28 13:38:52.550  INFO 4456 --- [           main] utils.PageUtils                          : Scrolling to move 'btnSearchDropMenu' to the middle of the screen
2018-11-28 13:38:53.619 ERROR 4456 --- [           main] BaseTestFolder.BaseTest                  : org.openqa.selenium.ElementNotVisibleException: element not interactable
  (Session info: chrome=70.0.3538.110)
  (Driver info: chromedriver=2.44.609538 (b655c5a60b0b544917107a59d4153d4bf78e1b90),platform=Windows NT 10.0.17134 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds

Я пытался передать команду set size в разных областях, в том числе непосредственно перед попыткой нажать отсутствующую кнопку и переупорядочить, когда параметры передаются моему объекту параметров chrome, прежде чем они будут переданы драйверу chrome.

Мне нужно, чтобы окно было не менее 1980x1080, но я не уверен, почему это нельзя установить при запуске тестов на GOCD.

Я в недоумении, почему возникает эта проблема. любая помощь будет принята с благодарностью

**РЕДАКТИРОВАТЬ 1**

Странно то, что я могу уменьшить размер окна и это свойство сохранится...

2018-11-28 15:47:02.754  INFO 19088 --- [           main] configuration.GoogleChrome               : Window size: (1000, 600)

ИЗМЕНИТЬ 2

Добавил еще один аргумент, который я пробовал,

Это также проблема с jenkins - по умолчанию используется тот же размер окна: (1044, 788)


person henrywright88404    schedule 28.11.2018    source источник
comment
попробуйте добавить -- перед window-size, т.е. ChromeOptions options = new ChromeOptions(); options.addArguments("--window-size=1980,1080");   -  person Kiril S.    schedule 28.11.2018
comment
Спасибо, Кирил, я тоже попробовал это, а также попробовал это с Дженкинсом сейчас, и возникает та же проблема.   -  person henrywright88404    schedule 28.11.2018
comment
Вы можете попробовать обернуть тестовый прогон командой xvfb--screen=1980x1080x24` или около того. Скорее всего, хром выбирает какие-то странные значения по умолчанию, если не может обнаружить среду X, и xvfb (или, возможно, Xdummy) должен помочь с этим.   -  person moritz    schedule 05.12.2018


Ответы (1)


Эта проблема, похоже, была вызвана двумя проблемами,

1- Когда mvn clean test запускается из IDE, этот процесс выполняется под вашим текущим пользователем. Однако при запуске в среде CI процесс принадлежит процессу CI. поэтому не имеет такого же доступа к ресурсам.

2 При запуске из IDE всплывает хром. При запуске из среды CI я предположил, что по умолчанию хром работает в автономном режиме. Это не так, вы должны установить аргумент --headless, поэтому моя конфигурация, которая теперь работает, выглядит следующим образом

public class GoogleChrome extends Base {
private static final Logger logger = LogManager.getLogger(GoogleChrome.class);
private String rootPath = System.getProperty("user.dir").replace("\\","/");


@Autowired
protected WebDriver driver;

public WebDriver startChromeDriver() {
    logger.info("Chrome driver path : " + rootPath + "/../Tools/Drivers/chromedriver.exe");
    System.setProperty("webdriver.chrome.driver", rootPath + "/../Tools/Drivers/chromedriver.exe");

    Map<String, Object> prefs = new HashMap<String, Object>();
    logger.info("Disabling Chrome's credentials service");
    prefs.put("credentials_enable_service", false);
    logger.info("Disabling Chrome's password manager");
    prefs.put("password_manager_enabled", false);


    final String regex = "^\\D*$";
    final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
    final Matcher matcher = pattern.matcher(System.getProperty("user.name"));
    boolean isHuman = matcher.matches();



    ChromeOptions options = new ChromeOptions();
    options.setExperimentalOption("prefs", prefs);
    logger.info("Disabling Chrome's info bars");
    options.addArguments("disable-infobars");
    options.addArguments("--incognito");
    options.addArguments("--disable-gpu");
    options.addArguments("--no-sandbox");
    options.addArguments("--allow-insecure-localhost");

    if (isHuman){
        logger.info("Chrome starting maximized - isHuman: " +isHuman + " process run by " +System.getProperty("user.name"));
        options.addArguments("--start-maximized");
    } else {
        logger.info("Chrome starting headless - isHuman: " +isHuman + " process run by " +System.getProperty("user.name")) ;
        options.addArguments("--headless");
        options.addArguments("--window-size=1980,1080");
    }
    options.setAcceptInsecureCerts(true);

    try {
        logger.info("Killing Chrome browser");
        Runtime.getRuntime().exec("taskkill /F /IM chrome.exe");
    } catch (IOException e) {
        logger.error("Task Kill IOException : " + e.getMessage());
    }

    logger.info("Starting Chrome browser...");

    sleep(2);
    driver = new ChromeDriver(options);

    logger.info("Window size: "+ driver.manage().window().getSize());
    driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
    return driver;
}

}

person henrywright88404    schedule 28.11.2018