簡體   English   中英

硒測試對無頭鉻失敗

[英]selenium tests fail against headless chrome

我試圖讓我的 selenium 測試自動化針對無頭 chrome 運行,以便我可以將它移動到 TeamCity。 我沒有任何運氣。 當我運行它時,Chrome 似乎是無頭運行(沒有瀏覽器彈出),但我得到一個NoSuchElementException 當非無頭運行時,自動化按預期工作。 拍攝的快照僅顯示一個白色矩形。

我已經對這個問題進行了廣泛的研究,但我一直無法找到適合我的解決方案。 該問題似乎已在https://bugs.chromium.org/p/chromedriver/issues/detail?id=476中報告,但已標記為已修復。 我認為問題可能出在錯誤的 chromedriver,或者錯誤的 chromedriver/selenium 組合上,但我嘗試了各種組合,但都沒有愛。

我在用:

  • 硒-java 3.6.0
  • 鉻驅動程序 2.33.506120
  • Windows 7 Enterprise Service Pack1,64 位

我的代碼是:

...
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM