[英]selenium tests fail against headless chrome
我試圖讓我的 selenium 測試自動化針對無頭 chrome 運行,以便我可以將它移動到 TeamCity。 我沒有任何運氣。 當我運行它時,Chrome 似乎是無頭運行(沒有瀏覽器彈出),但我得到一個NoSuchElementException
。 當非無頭運行時,自動化按預期工作。 拍攝的快照僅顯示一個白色矩形。
我已經對這個問題進行了廣泛的研究,但我一直無法找到適合我的解決方案。 該問題似乎已在https://bugs.chromium.org/p/chromedriver/issues/detail?id=476中報告,但已標記為已修復。 我認為問題可能出在錯誤的 chromedriver,或者錯誤的 chromedriver/selenium 組合上,但我嘗試了各種組合,但都沒有愛。
我在用:
我的代碼是:
...
ChromeOptions headlessOptions = new ChromeOptions();
headlessOptions.addArguments("--start-maximized");
headlessOptions.addArguments("--headless");
driver = new ChromeDriver(headlessOptions);
driver.get(url);
WebElement usernameTextfield = driver.findElement(By.cssSelector(".input.username"));
...
輸出是:
Starting ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) on port 41402
Only local connections are allowed.
Nov 01, 2017 10:22:51 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: OSS
org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":".input.username"}
(Session info: headless chrome=62.0.3202.75)
(Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 6.1.7601 SP1 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds
這使我無法將我的測試自動化作為 CI 的一部分包含在內,因此非常感謝任何幫助。
這對我有用:
var chromeOptions = new ChromeOptions();
chromeOptions.AddArguments("--headless");
chromeOptions.AddArguments("--disable-gpu");
chromeOptions.AddArguments("--window-size=1280,800");
chromeOptions.AddArguments("--allow-insecure-localhost");
//specifically this line here :)
chromeOptions.AddAdditionalCapability("acceptInsecureCerts", true, true);
來自https://bugs.chromium.org/p/chromium/issues/detail?id=721739
我遇到了同樣的問題,本地服務器正在使用自簽名證書,這是對我有用的組合:
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--disable-gpu");
options.addArguments("--no-sandbox");
options.addArguments("--allow-insecure-localhost");
試試這個:
final ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--window-size=1280,800");
WebDriver driver = new ChromeDriver(options);
您的 chromedriver/selenium 組合看起來很完美。 在我看來,這是一個嚴重的同步問題。 我們需要引起一些等待,如下所示:
driver.get(url);
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement usernameTextfield = wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.cssSelector(".input.username"))));
usernameTextfield.sendKeys("user_name");
對於可能因此錯誤而在此處絆倒但正在使用 python 的任何人。
只有在沒有使用無頭時,我才遇到腳本工作的問題。
最初,我的選項如下所示:
options = Options()
options.headless = True
找到此線程后,我將選項更改為以下內容:
options = Options()
options.add_argument("--headless");
options.add_argument("--window-size=1440, 900")
當 selenium 導航頁面時,無頭窗口的格式似乎有所不同。 去圖。 這解決了我所有的問題。
我遇到了完全相同的問題。
您需要將計算機的用戶代理添加到您的選項中,要搜索您的用戶代理,只需輸入谷歌:״ my user agent
״
然后將其添加到選項中: options.add_argument("your-user-agent")
添加用戶代理為我完成了這項工作:
--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.