Selenyum Hatası - Uzak WebDriver'a HTTP isteği 60 saniye sonra zaman aşımına uğradı


85

Bazı dahili test süreçlerimizi otomatikleştirmek için kullandığımız Selenium'u birkaç aydır kullanıyorum. Senaryolar iyi geçiyor. Kısa bir süre önce FF 27.01 kullanarak C # 2.40.0 web sürücüsüne yükselttim ve komut dosyalarımız şu hatayla rastgele yerlerde başarısız oluyor.

[Portal.SmokeTest.SmokeRunTest.Booking] TearDown method failed. OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/element timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
TearDown : OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/window timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
[09:01:20]
[Portal.SmokeTest.SmokeRunTest.Booking] TearDown method failed. OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/element timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
TearDown : OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/window timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
   at OpenQA.Selenium.Support.UI.DefaultWait`1.PropagateExceptionIfNotIgnored(Exception e)
   at OpenQA.Selenium.Support.UI.DefaultWait`1.Until[TResult](Func`2 condition)
   at Portal.Test.Helpers.Process_Bookings.OpenBookings.SelectBooking(String bookingnumber)
   at Portal.SmokeTest.SmokeRunTest.Booking() in d:\TeamCityAgent\work\dac1dcea7f2e80df\SmokeTests\SmokeRunTest.cs:line 68
--WebException
   at System.Net.HttpWebRequest.GetResponse()
   at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
--TearDown
   at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
   at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute)
   at OpenQA.Selenium.Firefox.Internal.ExtensionConnection.Execute(Command commandToExecute)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Close()
   at Portal.Test.Helpers.Setup.CloseWebdriver()
   at Portal.SmokeTest.SmokeRunTest.TearDown() in d:\TeamCityAgent\work\dac1dcea7f2e80df\SmokeTests\SmokeRunTest.cs:line 162
--WebException
   at System.Net.HttpWebRequest.GetResponse()
   at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)

Tek bir kod satırına kadar izlemeyi başardığım en son hata:

_setup.driver.FindElement(By.XPath("//button[@class='buttonSmall lockBookingButton']")).Click();

Can sıkıcı olan şey, sorunu gidermeye çalışmanın zor olduğunu kanıtlıyor, sanki testi yerel makinemde çalıştırıyorum, hata ayıklamada geçiyor. Ek olarak, testi çalıştırdığım yapı makinesindeki NUNIT koşucusu aracılığıyla çalıştırırsam, aynı zamanda geçer. Teamcity'yi kullanırken yalnızca otomatik derleme çalıştırma sürecimizin bir parçası olarak başarısız görünüyor. Dediğim gibi, bu aylardır sorunsuz çalışıyor ve değişen tek şey selenyum web sürücü kiti.

Bu sorunu daha önce hata ayıklama sırasında yaşadım ve bir Click()kod satırı çağrıldığında Firefox kilitleniyor gibi görünüyordu ve yalnızca testi durdurmak Firefox'un devam etmesine izin veriyordu. Web sürücüsü kaynağını değiştirmek de dahil olmak üzere burada bir dizi öneri var mı? Eğer başka biri öneride bulunabiliyorsa, mümkünse o rotadan aşağı inmek istemiyorum.


Bu kurulumu kullanan birkaç bağımsız projede tamamen aynı sorunu yaşadık ve bunun için hala bir çözümümüz yok. Yapabileceğimiz en iyi şey, WebDriver ve Firefox kurulumlarının eski sürümlerine geçmekti. Ayrıca bu davranışın WebDriver mı yoksa Firefox'tan mı kaynaklandığını bilmiyoruz.
Dio F

Yanıtlar:


23

Chrome sürücüsünü (v2.23) kullanırken / testleri TeamCity aracılığıyla çalıştırırken benzer bir sorun yaşadım. Chrome seçeneklerine "korumalı alan yok" bayrağını ekleyerek sorunu çözebildim:

var options = new ChromeOptions();
options.AddArgument("no-sandbox");

FF sürücüsü için benzer bir seçenek olup olmadığından emin değilim. Anladığım kadarıyla sorunun, SYSTEM hesabı altında Selenium'u çalıştıran TeamCity ile ilgisi var.


bu benim sorunumu da çözer. Aylarca denemedikten sonra artık krom testleri çalıştıramadım. Teşekkürler battlec2
Etienne

1
Kodum, IIS tarafından barındırılan bir ortamda sorunsuz çalışıyordu ve aniden durdu, ancak yine de birim testlerimde çalıştı. Bu satırı eklemek IIS ortam içinde tekrar çalışmasını sağladı. Teşekkürler!
Efsaneler

1
Webdriver 3.14'ün var options = new ChromeOptions(); options.AddArgument("--no-sandbox");C # sürümünde Çalışıyor olarak belirledim.
moto_geek

20
new FirefoxDriver(new FirefoxBinary(),new FirefoxProfile(),TimeSpan.FromSeconds(180));

Yukarıdaki kod satırlarını kullanarak tarayıcınızı başlatın. Benim için çalıştı.


Bizim için de düzeltildi. Sadece bir FF sürücüsü oluşturan ve başka hiçbir şey olmayan basit bir komut dosyası çalıştırırken, 60 saniyelik bir zaman aşımı% 100 çalıştı. FF'yi açmadan hemen önce veri tabanlarına bağlantı açan / okuyan / yazan / çok daha fazlasını yapan kaynak ağırlıklı betiğimizi çalıştırırken, 60 zaman aşımı zamanın yaklaşık% 50'sinde hatalara neden olur. Zaman aşımını 3 dakikaya çıkarmak sorunu çözdü. Görünüşe göre Webdriver'ın motoru ısıtmak için biraz daha zamana ihtiyacı var.
KayakinKoder

13

Bu sorunla ilk kez aylar önce karşılaştım (ayrıca click()komutta) ve o zamandan beri benim için bir sorun oldu. NET Selenium bağlamalarıyla ilgili bir tür sorun gibi görünüyor. IE sürücüsünde çalışan kişinin yazdığı bu blog yazısı, neler olduğunu açıklamaya yardımcı olur:

http://jimevansmusic.blogspot.com/2012/11/net-bindings-whaddaymean-no-response.html

Ne yazık ki, bu soruna gerçek bir çözüm yok gibi görünüyor. Bu sorun Selenium geliştiricilerine her iletildiğinde ( buraya bakın ), bu tipik bir yanıttır :

Örnek bir sayfa veya sorunun yeniden üretilebileceği genel bir sitenin sayfasına bağlantı içermesi gereken tekrarlanabilir bir senaryoya ihtiyacımız var.

Tutarlı bir şekilde yeniden üretilebilir bir test senaryosu gönderebiliyorsanız, bu hatayı tamamen ortadan kaldırmaya çok yardımcı olabilir.

Bununla birlikte, belki bu geçici çözümü bu arada deneyebilirsiniz. Yapmaya çalıştığınız HTML düğmesinin Javascript içeren click()bir onclicközniteliği varsa , komutu çağırmak yerine bu kodu doğrudan yürütmek için bir JavascriptExecutor kullanmayı düşünün click(). onclickJavascript'i çalıştırmanın doğrudan bazı testlerimin geçmesine izin verdiğini fark ettim.


9

Firefox ile aynı sorunu yaşadım. Seçeneklerle Chrome'a ​​geçtim ve o zamandan beri her şey yolunda gitti.

ChromeOptions options = new ChromeOptions();
 options.AddArgument("no-sandbox");

 ChromeDriver driver = new ChromeDriver(ChromeDriverService.CreateDefaultService(), options, TimeSpan.FromMinutes(3));
 driver.Manage().Timeouts().PageLoad.Add(System.TimeSpan.FromSeconds(30));

Muhtemelen burada yanılıyorum, ama görünen o ki son satırın bir etkisi olmayacak. PageLoad bir TimeSpan'dır ve .Add on TimeSpan, PageLoad'u değiştirmeyen saf bir fonksiyondur, sadece atılmakta olan yeni bir TimeSpan döndürür.
Jason Ritchie

3

Benim durumumda, benim düğmenin türüdür submitdeğil buttonve ben değiştirmek Clickiçin Sumbitdaha sonra her iş iyi. Aşağıdaki gibi bir şey

itibaren driver.FindElement(By.Id("btnLogin")).Click();

-e driver.FindElement(By.Id("btnLogin")).Submit();

BTW, bu yazıdaki tüm cevabı denedim ama benim için çalışmadım.


3

Benzer bir sorun var. Sürücünün kurucusunda daha fazla zaman ayarlamaya çalışın - örneğin ekleyin.

var timespan = TimeSpan.FromMinutes(3);

var driver = new FirefoxDriver(binary, profile, timeSpan);

Merhaba bewu, aşağıdaki gibi bir formatta olur mu? driver.Manage (). Timeout (). ImplicitlyWait (TimeSpan.FromSeconds (5));
Nathan

4
Hayır, bu bekleme değil ImplicitlyWait öğelerin bulunması ile bağlantılı. İsteğin devam etmesini beklerken (yanılmıyorsam) varsayılan (60sn) sürücü zaman aşımını değiştirmeniz gerekir. Her neyse, FF sürücüsünün kurucusunu ayarladığınız ve oraya daha fazla öznitelik eklediğiniz veya zaman aşımını değiştirdiğiniz bir satır bulmalısınız. Şunun gibi bir şey:driver = new FirefoxDriver(new FirefoxBinary(), new FirefoxProfile(path to your profile), TimeSpan.FromMinutes(3));
Bart Wojtala

2
ChromeDriver için şöyle görünecektirdriver = new ChromeDriver(service, chromeDriverOptions, TimeSpan.FromMinutes(3));
redwards510

2

Sanırım bu sorun, web sürücüsü nesnenize erişmeye çalıştığınızda ortaya çıkıyor.

1) bir pencere kapandı ve henüz ebeveyne geçmediniz

2) tam olarak hazır olmayan ve geçişinizden bu yana güncellenen bir pencereye geçtiniz

Beklediğiniz windowhandles.countşeyin olmasını beklemek, sayfa içeriğini hesaba katmaz, ayrıca document.ready. Hâlâ bu soruna bir çözüm arıyorum


2

Benim durumumda, bunun nedeni krom güncelleme klasörünü silmiş olmamdır. Chrome'u yeniden yükledikten sonra iyi çalışıyor.


1

Sorun şu ki, Click()inşa ortamınızda zaman aşımına uğrayanların değerlendirilmesi ... ne olduğunu araştırmak isteyebilirsiniz Click().

Ayrıca, Click()zaman zaman değerlendirmeler ağ hızlarına bağlı olarak daha uzun sürdüğü için Yeniden Denemeler eklemeyi deneyin.


Merhaba, Tarayıcı kilitlendiğinden yeniden dene seçeneği çalışmayacak. Yalnızca testin durdurulması tarayıcının devam etmesini sağlar.
Nathan

1

Benim durumumda, ekiplerimizin sunucu oluşturmasında bu hatayı buldum. Testler yerel geliştirme makinelerimizde çalıştı.

Sorun, hedef web sitesinin yapı sunucusunda doğru şekilde yapılandırılmamasıydı, bu nedenle tarayıcıyı doğru bir şekilde açamıyordu.

Chrome sürücüsünü kullanıyorduk ama bunun bir fark yarattığından emin değilim.


1

Benim durumumda sorun SendKeys () ve Uzak Masaüstü ile ilgiliydi . Şimdiye kadar sahip olduğum geçici çözümü yayınlamak:

VSphere'de barındırılan ve RDP aracılığıyla yönetilen bir düğümde bir Jenkins işinin parçası olarak çalıştırıldığında başarısız olacak bir Selenium testim vardı. Bazı sorun giderme işlemlerinden sonra, Uzak Masaüstü bağlanırsa ve odaklanırsa başarılı olur, ancak Uzak Masaüstü bağlantısı kesilirse veya hatta en aza indirilirse istisna dışında başarısız olur.

Bir çözüm olarak, RDP yerine vSphere Konsolu üzerinden oturum açtım ve vSphere'i kapattıktan sonra bile test artık başarısız olmadı. Bu bir geçici çözümdür, ancak asla RDP üzerinden oturum açmamaya ve her zaman yalnızca vSphere Konsolu üzerinden yönetmeye dikkat etmeliyim.


0

Selenium.WebDriver.ChromeDriver'ı 2.40.0'dan 2.27.0'a değiştirmek benim için uygun


0

Artık new FirefoxDriver(binary, profile, timeSpan)kullanılmıyor.

Artık new FirefoxDriver(FirefoxDriverService.CreateDefaultService(), FirefoxOptions options, TimeSpan commandTimeout)bunun yerine kullanabilirsiniz .

Bir de var new FirefoxDriver(string geckoDriverDirectory, FirefoxOptions options, TimeSpan commandTimeout)ve çalışıyor. Ancak belgelenmemiş ve içinde geckoDriverDirectoryolmasına rağmen manuel olarak belirtmeniz gerekiyor Path.


0

Biz de aynı sorunu yaşadık. Bizim durumumuzda, tarayıcı bir oturum açma açılır penceresi (Windows kimlik doğrulaması) tarafından engellendi, bu nedenle 60 saniye sonra geri dönmedi. Chrome'un çalıştığı Windows hesabına doğru erişim haklarının eklenmesi sorunu çözdü.


0

Arrrgh! Bu karşılaşan MacOS bugün ve konu olarak basit olarak oldu - yeni yüklemeye düşündüren açılan pencerede Appium versiyonu uzaktan CI yapı sunucuda gösteriyordu.

Sadece ona VNC yapmak ve " Daha sonra yükle " yi tıklamak sorunu çözdü .


0

Benim durumumda yukarıdaki cevaplardan hiçbiri sorunumu tamamen çözmedi. ( no-sandbox) Modunu, uzatılmış zaman aşımı süresiyle bağlantıyı ( driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), capability, TimeSpan.FromMinutes(3));) ve sayfa yükleme zaman aşımını ( driver.Manage().Timeouts().PageLoad.Add(System.TimeSpan.FromSeconds(30));) kullandım, bu yüzden kodum şimdi şöyle görünüyor:

    public IWebDriver GetRemoteChromeDriver(string downloadPath)
    {
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.AddArguments(
            "start-maximized",
            "enable-automation",
            "--headless",
            "--no-sandbox", //this is the relevant other arguments came from solving other issues
            "--disable-infobars",
            "--disable-dev-shm-usage",
            "--disable-browser-side-navigation",
            "--disable-gpu",
            "--ignore-certificate-errors");
        capability = chromeOptions.ToCapabilities();

        SetRemoteWebDriver();
        SetImplicitlyWait();
        Thread.Sleep(TimeSpan.FromSeconds(2));
        return driver;
    }
    
    private void SetImplicitlyWait()
    {
        driver.Manage().Timeouts().PageLoad.Add(TimeSpan.FromSeconds(30));
    }


    private void SetRemoteWebDriver()
    {
        driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), capability, TimeSpan.FromMinutes(3));
    }

Ancak yukarıdaki yöntemlerden hiçbiri sorunumu çözmediğinden bahsettiğim gibi, sürekli olarak hatayı alıyordum ve birden çok chromedriver.exe ve chrome.exe işlemi etkindi (Chromedriver'ın ~ 10'u ve Chrome'un ~ 50'si).

Bu yüzden bir yerde, sürücüyü elden çıkardıktan sonra bir sonraki teste başlamadan önce birkaç saniye beklemem gerektiğini okudum, bu yüzden atma yöntemi için aşağıdaki satırı ekledim:

    driver?.Quit();
    driver?.Dispose();
    Thread.Sleep(3000);

Bu uyku modifikasyonu ile artık zaman aşımı hatası almıyorum ve gereksiz yere açılan chromedriver.exe ve chrome.exe işlemleri yok.

Umarım ben bu kadar uzun süre bu sorunla mücadele eden birine yardım etmişimdir.


0

Başsız bir ChromeDriver'ı bir Windows sunucusunda zamanlanmış bir görevle (katılımsız) çalıştırmaya çalışırken aynı istisnayı yaşadım. Bunu benim için çözen , görevi kullanıcı " Yöneticiler " olarak çalıştırmaktı (sonunda S'ye dikkat edin). Ayrıca yaptığım şey (konuyla ilgili olup olmadığını bilmiyorum) görev "Koşullar" sekmesinden "Herhangi Bir Bağlantı" olarak seçildi.


-1

ChromeDriver için aşağıdakiler benim için çalıştı:

string chromeDriverDirectory = "C:\\temp\\2.37";
 var options = new ChromeOptions();
 options.AddArgument("-no-sandbox");
 driver = new ChromeDriver(chromeDriverDirectory, options, 
 TimeSpan.FromMinutes(2));

Selenium sürüm 3.11, ChromeDriver 2.37

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.