NoSuchElementException,无头铬和硒

时间:2018-03-27 19:00:09

标签: java selenium selenium-webdriver xpath google-chrome-headless

我正在尝试使用无头铬进行硒测试并进行了以下更改:

DesiredCapabilities desiredCapabilities = DesiredCapabilities.chrome();
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--disable-gpu");
options.addArguments("window-size=1800x1080");
desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, options);

我的测试记录到内部页面,然后等待元素可见:

selenium.waitForElementVisible("xpath=//tr/td/div[@class[contains(., 'x-grid-cell-inner')] and text()='Global Test Merchant 14']");

当我没有无头选项但是得到时,这一切都很有效:

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element:  {"method":"xpath","selector":"//tr/td/div[@class[contains(., 'x-grid-cell-inner')] and text()='Global Test Merchant 14']"} 

当我用--headless运行测试时。

Chrome版本:62.0.3202.89 chromeDriver:2.33.506120 Selenium版本:2.53.0 Windows 7

5 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,我的错误是因为我正在制作driver.get(“ localhost:...”)而不是driver.get(“ http://localhost:...”)

答案 1 :(得分:0)

当您看到 NoSuchElementException 时,您可以考虑使用xpath和服务员来查看元素,如下所示:

//tr/td/div[@class='x-grid-cell-inner' and contains(., 'Global Test Merchant')]

答案 2 :(得分:0)

当我无头跑时,我遇到了类似的问题,我的项目在运行无头时继续触发NoSuchElementException并且默认浏览​​器检查阻碍了,尝试添加这些参数。只是一个想法

chromeOptions.addArguments("--headless");
chromeOptions.addArguments("--test-type");
chromeOptions.addArguments("--disable-gpu");
chromeOptions.addArguments("--no-first-run");
chromeOptions.addArguments("--no-default-browser-check");
chromeOptions.addArguments("--ignore-certificate-errors");
chromeOptions.addArguments("--start-maximized");

答案 3 :(得分:0)

我有一个类似的问题。

我尝试了以下选项,并且对我有用。

    options.addArguments("--window-size=1920,1080");
    options.addArguments("--disable-extensions");
    options.addArguments("--proxy-server='direct://'");
    options.addArguments("--proxy-bypass-list=*");
    options.addArguments("--start-maximized");
    options.addArguments("--headless");
    options.addArguments("--disable-gpu");
    options.addArguments("--disable-dev-shm-usage");
    options.addArguments("--no-sandbox");
    options.addArguments("--ignore-certificate-errors");

答案 4 :(得分:0)

在我的特殊情况下,我只需要使用这三个参数来解决同一问题:

value