当我在无头模式chrome浏览器中运行测试脚本时,元素链接不可见,无法执行linkElement.click()
。在头模式下一切都好。所有其他信息都在stacktrace中。
有人知道该怎么办吗?
堆栈跟踪:
发生错误:消息:元素不可见
(会议信息:无头铬= 60.0.3112.90)
(驱动程序信息:chromedriver = 2.31.488763(092de99f48a300323ecf8c2a4e2e7cab51de5ba8),platform = Windows NT 6.1.7601 SP1 x86_64)
追溯(最近的呼叫最后):
文件" C:\ nik-x.py",第148行,在主要文件中 FUNC(NIK)
文件" C:\ lib \ support.py",第121行,在包装器中 举起来 文件" C:\ lib \ support.py",第108行,在newFunc中 res [0] = func(* args,** kwargs)
文件" C:\ testcases \ nik-1003.py",第37行,在testcase中 i.click()
文件" C:\ Python36 \ lib \ site-packages \ selenium \ webdriver \ remote \ webelement.py",第7行
7,点击
self._execute(Command.CLICK_ELEMENT)
文件" C:\ Python36 \ lib \ site-packages \ selenium \ webdriver \ remote \ webelement.py",第4行
93,在_execute
return self._parent.execute(command,params)
文件" C:\ Python36 \ lib \ site-packages \ selenium \ webdriver \ remote \ webdriver.py",第25行
6,执行中 self.error_handler.check_response(响应)
文件" C:\ Python36 \ lib \ site-packages \ selenium \ webdriver \ remote \ errorhandler.py",line
194,在check_response中 提出exception_class(消息,屏幕,堆栈跟踪)
selenium.common.exceptions.ElementNotVisibleException:消息:元素不可见
(会议信息:无头铬= 60.0.3112.90)
(驱动程序信息:chromedriver = 2.31.488763(092de99f48a300323ecf8c2a4e2e7cab51de5ba8),platform = Windows NT 6.1.7601 SP1 x86_64)
这是我的代码:
icons = nik.elementLeftmenuSportIcons()
for i in icons[:-1]:
try:
i.click()
来自测试页面的HTML:<a href="#" class="default b_futbal gaPageEventElement" data-ga-cat="Sporty" data-ga-action="futbal">
<span class="left-menu-only-large-res">Futbal</span>
</a>
答案 0 :(得分:8)
我认为问题是,在Headless Chrome的默认视图框(600x800)中,Element真的不可见。
启动镶边时,必须将无头浏览器的窗口大小设置为参数。我正在使用javascript(我认为API在python下看起来很相似):
var Options = require('selenium-webdriver/chrome').Options;
var options = new Options();
options.addArguments('headless');
options.addArguments('disable-gpu');
options.addArguments('window-size=1200,1100');
browser = builder.forBrowser('chrome').setChromeOptions(options).build();
其他信息
我也是通过带有browser.manage().window().setSize(1200,1100);
的webdriver来设置窗口大小但是这个命令在无头chrome中是不够的。在非无头变体中,这是有效的。
答案 1 :(得分:0)
options.addArguments(&#39;窗口尺寸= 1200,1100&#39);
在无头铬模式下为我工作:)非常感谢@powerpete
以下是groovy中无头镀铬的完整设置: -
ChromeOptions options = new ChromeOptions()
DesiredCapabilities capabilities = DesiredCapabilities.chrome()
options.addArguments('headless','disable-gpu','--test-type','--ignore-certificate-errors')
options.addArguments('window-size=1200,1100');
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
capabilities.setCapability(ChromeOptions.CAPABILITY, options)
driver = {new ChromeDriver(capabilities)}
答案 2 :(得分:0)
您可以通过以下两种方式进行操作。
1。如下所述在 chrome选项中传递窗口大小(实例化驱动程序实例之前):
ChromeOptions options = new ChromeOptions()
options.addArguments("headless");
options.addArguments("window-size=1200,1100");
WebDriver driver = new ChromeDriver(options);
2. 实例化Chrome驱动程序后设置窗口大小:
WebDriver webDriver= new ChromeDriver();
webDriver.manage().window().setSize(new Dimension(1200,1100));
答案 3 :(得分:0)
如果更改窗口大小对像我这样的人不起作用,则可能是HTML实际上在无头模式和有头模式之间切换。
我遇到了类似的问题,但是这种无脑的工作是在FireFox而不是Chrome中工作的。 Chrome元素的Xpath仅在抬头模式下起作用。我发现在Chrome的无头模式下HTML稍有变化。
通过在Chrome中使用无头模式时,将Chrome元素上的Xpath替换为FireFox元素上的Xpath来解决此问题。