首页 > 解决方案 > GOCD 管道,Selenium ChromeDriver 窗口大小未设置

问题描述

将 chrome 的窗口大小设置为最大化或 1980x1080 时,使用

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

或者

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

或者

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

或者

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

我已经尝试在不同区域中传递设置大小命令,包括在尝试单击选项将选项传递给我的Chrome选项对象之前的丢失的按钮之前,然后再将其重新订购。

我需要窗口至少为 1980x1080 但我不确定为什么在 GOCD 上运行测试时无法设置

我不知道为什么会出现这个问题。任何帮助将不胜感激

**编辑 1 **

奇怪的是我可以减小窗口大小并且这个属性会保持......

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

编辑 2

添加了我尝试过的另一个论点,

这也是 jenkins 的问题 - 默认为相同的窗口大小:(1044, 788)

标签: seleniumselenium-chromedrivergo-cd

解决方案


这个问题看起来是由两个问题引起的,

1- 从 IDE 运行 mvn clean test 时,此过程在您当前的用户下运行。但是,当由 CI 环境运行时,该进程归 CI 进程所有。所以没有相同的资源访问权限。

2 从 IDE 运行时,会弹出 chrome。从 CI 环境运行时,我假设它默认 chrome 以无头模式运行。它没有,您必须设置 --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;
}

}


推荐阅读