Selenium FindElement和Chrome无头模式

5

按照这个建议,在无界面模式下启动chromedriver.exe,并只使用以下参数:

 options.AddArgument("headless");
 options.AddArgument("window-size=1280,960");

chromedriver在无头模式下隐秘启动,但是Selenium的FindElement()命令在Chrome无头页面上未找到任何内容。相反,它会抛出此异常:

OpenQA.Selenium.NoSuchElementException类型的异常在WebDriver.dll中发生,但未在用户代码中处理

附加信息:没有这样的元素:无法定位元素:

Q1: 有人成功在Chrome的无头模式下运行Selenium命令吗?

Q2: 您能够使用运行在无头模式下的chromedriver进行FindElement操作吗?如果可以,您是如何做到的?


阅读更多后,也许需要类似以下内容?将其添加到Chrome启动选项中,然后可能连接到chromedriver?
"remote-debugging-port=9222"
但使用该选项后,IWebDriver和chromedriver都不会打开。


背景信息:为了回答“为什么要这样做?”主要原因是作为CI的一部分运行的测试。这些是在VM上运行的测试,可能不支持1080p显示器。如果我们以无头模式运行并以这种方式设置分辨率,那么就可以。


1
SpecFlow没有FindElements。它与浏览器自动化无关。这个问题是关于Selenium的。 - Andreas Willich
我一直使用Selenium + Chrome headless。不知道这对你有什么帮助,因为我不明白你的问题是什么。也许你可以阅读一下[ask]。 - SiKing
如果在使用Selenium + Chrome + SomeProxy(用于在运行非单元测试,如IT / FT / Selenium基于浏览器的测试等时将调用重定向到端点)+以HEADLESS模式运行测试时涉及代理(例如proxymob或类似代理),则似乎会出现此问题。我建议尝试使用不同的代理服务器(例如Traefik等)。 - AKS
可能与此错误有关:https://github.com/SeleniumHQ/selenium/issues/4477 - Phyxx
1个回答

2
在你的主类中添加以下代码行:

将以下代码行添加到您的主类中:

ChromeOptions options = new ChromeOptions(); 
options.setHeadless(true); 
options.addArguments("--window-size=1920,1080"); 
options.addArguments("--disable-gpu"); 
options.addArguments("--disable-extensions"); options.setExperimentalOption("useAutomationExtension", false); options.addArguments("--proxy-server='direct://'"); 
options.addArguments("--proxy-bypass-list=*"); 
options.addArguments("--start-maximized");
options.addArguments("--headless"); 
WebDriver driver = new ChromeDriver(options);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接