4

當我在無頭模式chrome瀏覽器中運行測試腳本時,元素鏈接不可見,無法做到linkElement.click()。在頭部模式下一切正常。所有其他信息都在堆棧跟蹤中。 任何人都知道該怎麼做,請嗎?ElementNotVisibleException當使用無頭Chrome瀏覽器

堆棧跟蹤:發生

錯誤:消息:元素不可見
(會話信息:無頭鉻= 60.0.3112.90)
(駕駛員信息:chromedriver = 2.31.488763(092de99f48a300323ecf8c2a4e2e7cab51de5ba8),平臺= Windows NT的6.1.7601 SP1 x86_64的)
回溯(最近通話最後一個):
文件 「C:\ nik-x.py」,線路148,在主
FUNC(聶)
文件「C:\ LIB \支持。 PY」,線121,在包裝
加註保留
文件 「C:\ lib中\ support.py」,線路108,在newFunc
RES [0] = FUNC(*指定參數時,** 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中\站點包\硒\的webdriver \遠程\ webelement.py」,第4行
93,在_execute
返回self._parent.execute(命令,則params)
文件 「C:\ Python36 \ lib中\站點包\硒\的webdriver \遠程\ webdriver.py」,第25行
6,在執行
self.error_handler.check_response(響應)
文件 「C:\ Python36 \ lib中\站點包\硒\的webdriver \遠程\ errorhandler.py」,線
194,在check_response
加註exception_class(消息,屏幕,堆棧跟蹤)
selenium.common.exceptions.ElementNotVisibleException:消息:元素不可見
(會話信息:無頭鉻= 60.0.3112.90)
(駕駛員信息:chromedriver = 2.31.488763(092de99f48a300323ecf8c2a4e2e7cab51de5ba8),平臺= 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

錯誤堆棧跟蹤了一切'ElementNotVisibleException:消息:元素不可見「要麼等待元素可見,要麼必須將該元素置於視口內才能點擊。 – DebanjanB

+0

這也可能是JS中的一些實際差異。因爲JS可能會改變屬性。取代單擊元素,獲取元素並打印其所有屬性,特別是座標和所有屬性。然後看看有什麼區別 –

+0

@ DebanjanB謝謝,我試圖添加等待(10),switch_to_frame,窗口等,但我仍然有同樣的問題。 – Ghost

回答

1

我認爲問題是,該元素是真的沒有無頭的Chrome默認視框(600×800)可見。

啓動chrome時,無頭瀏覽器的窗口大小必須設置爲參數。我使用JavaScript(我覺得API看起來下蟒類似):

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(); 

附加信息

我設置了窗口的大小也用的webdriver但browser.manage().window().setSize(1200,1100);這個命令是不夠的在無頭鉻。在非無頭變體中,這是行得通的。

0

options.addArguments('window-size = 1200,1100');

在無頭的反轉片模式爲我工作:)感謝很多@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)}