ข้อผิดพลาดซีลีเนียม - คำร้องขอ HTTP ไปยัง WebDriver ระยะไกลหมดเวลาหลังจาก 60 วินาที


85

ฉันใช้ซีลีเนียมมาหลายเดือนแล้วซึ่งเราใช้เพื่อทำให้กระบวนการทดสอบภายในบางอย่างเป็นไปโดยอัตโนมัติ สคริปต์ผ่านไปอย่างดี ฉันเพิ่งอัปเกรดเป็น C # 2.40.0 webdriver โดยใช้ FF 27.01 และตอนนี้สคริปต์ของเราล้มเหลวในที่สุ่มโดยมีข้อผิดพลาดต่อไปนี้

[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)

ข้อผิดพลาดล่าสุดที่ฉันสามารถติดตามโค้ดบรรทัดเดียวได้:

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

สิ่งที่น่ารำคาญคือการพยายามแก้ไขปัญหานั้นพิสูจน์ได้ยากราวกับว่าฉันทำการทดสอบบนเครื่องในพื้นที่ของฉันในการดีบักมันจะผ่านไป นอกจากนี้หากฉันรันผ่าน NUNIT runner บนเครื่อง build ที่ฉันกำลังทำการทดสอบอยู่มันก็จะผ่านไปด้วย ดูเหมือนว่าจะล้มเหลวเนื่องจากเป็นส่วนหนึ่งของกระบวนการทำงานบิลด์อัตโนมัติของเราเมื่อใช้ Teamcity อย่างที่ฉันพูดไปสิ่งนี้ทำงานได้ดีมาหลายเดือนก่อนหน้านี้และสิ่งเดียวที่เปลี่ยนไปคือชุด selenium webdriver kit

ฉันเคยประสบปัญหานี้มาก่อนในขณะที่อยู่ในการดีบักและเมื่อมีClick()การเรียกรหัสบรรทัด Firefox ดูเหมือนจะล็อกและการหยุดการทดสอบเท่านั้นที่จะอนุญาตให้ Firefox ดำเนินการต่อ มีคำแนะนำหลายประการเกี่ยวกับการแก้ไขแหล่งที่มาของ webdriver? ฉันไม่ต้องการลงไปในเส้นทางนั้นถ้าเป็นไปได้หากมีใครสามารถให้คำแนะนำได้


เรามีปัญหาเดียวกันในโครงการอิสระหลายโครงการที่ใช้การตั้งค่านี้และยังไม่มีวิธีแก้ปัญหาสำหรับสิ่งนี้ ทางออกที่ดีที่สุดของเราคือปรับลดรุ่นเป็นรุ่นเก่าของชุดประกอบ WebDriver และ Firefox เรายังไม่รู้ด้วยว่าพฤติกรรมนี้เกิดจาก WebDriver หรือ Firefox
Dio F

คำตอบ:


23

ฉันมีปัญหาคล้ายกันในการใช้ไดรเวอร์ Chrome (v2.23) / เรียกใช้การทดสอบผ่าน TeamCity ฉันสามารถแก้ไขปัญหาได้โดยการเพิ่มค่าสถานะ "no-sandbox" ในตัวเลือก Chrome:

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

ฉันไม่แน่ใจว่ามีตัวเลือกที่คล้ายกันสำหรับไดรเวอร์ FF หรือไม่ จากสิ่งที่ฉันเข้าใจว่าปัญหานี้เกี่ยวข้องกับ TeamCity ที่ใช้งาน Selenium ภายใต้บัญชี SYSTEM


สิ่งนี้ช่วยแก้ปัญหาของฉันได้เช่นกัน ฉันไม่สามารถทำการทดสอบ Chrome ได้อีกต่อไปหลังจากไม่ได้ลองใช้มาหลายเดือน ขอบคุณ combatc2
Etienne

1
รหัสของฉันทำงานได้ดีใน IIS ที่โฮสต์ env และหยุดกะทันหัน แต่ยังใช้งานได้ในการทดสอบหน่วยของฉัน การเพิ่มบรรทัดนี้ทำให้ทำงานได้อีกครั้งใน IIS env ขอบคุณ!
Legends

1
ฉันคิดว่าเป็น var options = new ChromeOptions(); options.AddArgument("--no-sandbox");Working now ในเวอร์ชัน C # Webdriver 3.14
moto_geek

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

เปิดเบราว์เซอร์ของคุณโดยใช้โค้ดด้านบน มันได้ผลสำหรับฉัน


คงที่สำหรับเราเช่นกัน เมื่อเรียกใช้สคริปต์พื้นฐานที่เพิ่งสร้างไดรเวอร์ FF และไม่มีอะไรอื่นการหมดเวลา 60 วินาทีจะทำงานได้ 100% ของเวลา เมื่อเรียกใช้สคริปต์ที่ใช้ทรัพยากรมากซึ่งจะเปิดการเชื่อมต่อไปยังฐานข้อมูล / อ่าน / เขียน / ทำมากขึ้นทันทีก่อนที่จะเปิด FF การหมดเวลา 60 จะทำให้เกิดความล้มเหลว ~ 50% ของเวลา การเพิ่มระยะหมดเวลาเป็น 3 นาทีช่วยแก้ปัญหาได้ ดูเหมือนว่า Webdriver จะต้องใช้เวลาอีกเล็กน้อยเพื่อให้เครื่องยนต์อุ่นเครื่อง
KayakinKoder

13

ฉันพบปัญหานี้ครั้งแรกเมื่อหลายเดือนก่อน (เช่นเดียวกับclick()คำสั่ง) และเป็นปัญหาสำหรับฉันตั้งแต่นั้นมา ดูเหมือนว่าจะมีปัญหากับการผูก. NET Selenium โพสต์บล็อกนี้โดยผู้ชายที่ทำงานกับไดรเวอร์ IE มีประโยชน์ในการอธิบายสิ่งที่เกิดขึ้น:

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

น่าเสียดายที่ดูเหมือนจะไม่มีวิธีแก้ปัญหานี้อย่างแท้จริง เมื่อใดก็ตามที่มีการแจ้งปัญหานี้ให้กับผู้พัฒนา Selenium ( ดูที่นี่ ) นี่คือคำตอบทั่วไป :

เราจำเป็นต้องมีสถานการณ์จำลองที่สามารถทำซ้ำได้ซึ่งต้องมีหน้าตัวอย่างหรือลิงก์ไปยังหน้าของไซต์สาธารณะที่สามารถทำให้เกิดปัญหาได้

หากคุณสามารถส่งกรณีทดสอบที่ทำซ้ำได้อย่างสม่ำเสมอนั่นอาจเป็นประโยชน์มากในการทำให้จุดบกพร่องนี้ได้รับการพักผ่อนอย่างดี

ที่กล่าวว่าคุณอาจลองใช้วิธีแก้ปัญหานี้ในระหว่างนี้ หากปุ่ม HTML ที่คุณพยายามclick()มีonclickแอตทริบิวต์ที่มี Javascript ให้พิจารณาใช้JavascriptExecutorเพื่อเรียกใช้โค้ดนั้นโดยตรงแทนที่จะเรียกใช้click()คำสั่ง ฉันพบว่าการเรียกใช้onclickJavascript โดยตรงทำให้การทดสอบบางอย่างของฉันผ่านไปได้


9

มีปัญหาเดียวกันกับ Firefox ฉันเปลี่ยนไปใช้ Chrome ด้วยตัวเลือกต่างๆและทุกอย่างก็ดีตั้งแต่นั้นมา

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

ฉันน่าจะเข้าใจผิดที่นี่ แต่ดูเหมือนว่าบรรทัดสุดท้ายจะไม่มีผล PageLoad เป็น TimeSpan เองและ Add on TimeSpan เป็นฟังก์ชันที่บริสุทธิ์ซึ่งไม่ได้แก้ไข PageLoad เพียงแค่ส่งคืน TimeSpan ใหม่ซึ่งจะถูกละทิ้ง
Jason Ritchie

3

ในกรณีของฉันประเภทของปุ่มของฉันsubmitไม่ใช่buttonและฉันเปลี่ยนClickไปSumbitแล้วทุกอย่างทำงานได้ดี สิ่งที่ต้องการด้านล่าง

จาก driver.FindElement(By.Id("btnLogin")).Click();

ถึง driver.FindElement(By.Id("btnLogin")).Submit();

BTW ฉันได้รับการลองคำตอบทั้งหมดในโพสต์นี้ แต่ไม่ได้ผลสำหรับฉัน


3

มีปัญหาที่คล้ายกัน พยายามตั้งเวลาให้มากขึ้นในตัวสร้างไดรเวอร์ - เพิ่มเช่น

var timespan = TimeSpan.FromMinutes(3);

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

สวัสดี bewu ที่จะอยู่ในรูปแบบดังต่อไปนี้? driver.Manage (). หมดเวลา (). ImplicitlyWait (TimeSpan.FromSeconds (5));
นาธาน

4
ไม่ไม่ใช่การรอนี้ ImplicitlyWait เชื่อมต่อกับการค้นหาองค์ประกอบ คุณต้องเปลี่ยนระยะหมดเวลาโปรแกรมควบคุมเริ่มต้น (60sec) เมื่อรอให้การร้องขอดำเนินการต่อ (ถ้าฉันไม่ผิด) อย่างไรก็ตามคุณต้องหาบรรทัดที่คุณตั้งค่าคอนสตรัคเตอร์ไดรเวอร์ FF และเพิ่มคุณสมบัติเพิ่มเติมหรือเปลี่ยนการหมดเวลา สิ่งที่ชอบ:driver = new FirefoxDriver(new FirefoxBinary(), new FirefoxProfile(path to your profile), TimeSpan.FromMinutes(3));
Bart Wojtala

2
สำหรับ ChromeDriver จะมีลักษณะดังนี้driver = new ChromeDriver(service, chromeDriverOptions, TimeSpan.FromMinutes(3));
redwards510

2

ฉันคิดว่าปัญหานี้เกิดขึ้นเมื่อคุณพยายามเข้าถึงวัตถุไดรเวอร์เว็บของคุณหลังจากนั้น

1) หน้าต่างปิดลงและคุณยังไม่ได้เปลี่ยนไปใช้พาเรนต์

2) คุณเปลี่ยนไปใช้หน้าต่างที่ยังไม่ค่อยพร้อมและได้รับการอัปเดตตั้งแต่คุณเปลี่ยน

การรอwindowhandles.countให้เป็นสิ่งที่คุณคาดหวังไม่ได้คำนึงถึงเนื้อหาของหน้าหรือไม่ทำ document.ready ฉันยังคงค้นหาวิธีแก้ปัญหานี้


2

ในกรณีของฉันเป็นเพราะฉันลบโฟลเดอร์อัปเดต Chrome หลังจากติดตั้ง Chrome ใหม่ก็ใช้งานได้ดี


1

ปัญหาคือว่าการประเมินClick()ครั้งที่ออกมาในการสร้าง env ของคุณ .. Click()คุณอาจต้องการที่จะขุดลงไปในสิ่งที่เกิดขึ้นใน

ลองเพิ่ม Retrys Click()เนื่องจากในบางครั้งการประเมินจะใช้เวลานานขึ้นอยู่กับความเร็วของเครือข่าย ฯลฯ


สวัสดีตัวเลือกการลองใหม่จะไม่ทำงานเนื่องจากเบราว์เซอร์เพิ่งล็อก การหยุดการทดสอบเท่านั้นที่จะทำให้เบราว์เซอร์ทำงานต่อไปได้
นาธาน

1

ในกรณีของฉันฉันพบข้อผิดพลาดนี้เกิดขึ้นในทีมของเราสร้างเซิร์ฟเวอร์ การทดสอบทำงานบนเครื่อง dev ในพื้นที่ของเรา

ปัญหาคือเว็บไซต์เป้าหมายไม่ได้รับการกำหนดค่าอย่างถูกต้องบนเซิร์ฟเวอร์การสร้างดังนั้นจึงไม่สามารถเปิดเบราว์เซอร์ได้อย่างถูกต้อง

เราใช้ไดรเวอร์โครเมี่ยม แต่ไม่แน่ใจว่าจะสร้างความแตกต่าง


1

ในกรณีของปัญหาอยู่กับSendKeys () และใช้ Remote Desktop การโพสต์วิธีแก้ปัญหาที่ฉันมีจนถึงตอนนี้:

ฉันมีการทดสอบซีลีเนียมซึ่งจะล้มเหลวเมื่อรันเป็นส่วนหนึ่งของงานเจนกินส์บนโหนดที่โฮสต์ใน vSphere และจัดการผ่าน RDP หลังจากการแก้ไขปัญหาบางอย่างปรากฎว่าประสบความสำเร็จหากเชื่อมต่อเดสก์ท็อประยะไกลและโฟกัส แต่ล้มเหลวด้วยข้อยกเว้นหากเดสก์ท็อประยะไกลถูกตัดการเชื่อมต่อหรือแม้กระทั่งย่อเล็กสุด

เป็นวิธีแก้ปัญหาชั่วคราวฉันเข้าสู่ระบบผ่าน vSphere Console แทน RDP และหลังจากนั้นปิด vSphere การทดสอบก็ไม่ล้มเหลวอีกต่อไป นี่เป็นวิธีแก้ปัญหา แต่ฉันต้องระวังอย่าล็อกอินผ่าน RDP และดูแลผ่าน vSphere Console เท่านั้น



0

new FirefoxDriver(binary, profile, timeSpan)ได้รับล้าสมัย

ตอนนี้คุณสามารถใช้new FirefoxDriver(FirefoxDriverService.CreateDefaultService(), FirefoxOptions options, TimeSpan commandTimeout)แทนได้

นอกจากนี้ยังมีnew FirefoxDriver(string geckoDriverDirectory, FirefoxOptions options, TimeSpan commandTimeout)และใช้งานได้ แต่ไม่มีเอกสารและคุณต้องระบุด้วยตนเองgeckoDriverDirectoryแม้ว่าจะมีอยู่แล้วPathก็ตาม


0

เรามีปัญหาเดียวกัน ในกรณีของเราเบราว์เซอร์ถูกบล็อกโดยป๊อปอัปการเข้าสู่ระบบ (การรับรองความถูกต้องของ Windows) ดังนั้นจะไม่กลับมาหลังจาก 60 วินาที การเพิ่มสิทธิ์การเข้าถึงที่ถูกต้องไปยังบัญชี Windows Chrome กำลังทำงานภายใต้การแก้ไขปัญหา


0

อร๊าก! ต้องเผชิญกับสิ่งนี้ในmacOSในวันนี้และปัญหาก็ง่ายเหมือนกัน - หน้าต่างป๊อปอัปแนะนำให้ติดตั้งAppiumใหม่เวอร์ชันใหม่แสดงบนเซิร์ฟเวอร์สร้าง CI ระยะไกล

เพียงแค่ VNC ไปที่มันและคลิก " ติดตั้งในภายหลัง " ก็แก้ไขได้


0

ในกรณีของฉันไม่มีคำตอบใดข้างต้นสามารถแก้ปัญหาของฉันได้อย่างสมบูรณ์ ฉันลงเอยด้วยการใช้no-sandboxโหมด( ) การเชื่อมต่อกับระยะหมดเวลาขยาย ( driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), capability, TimeSpan.FromMinutes(3));) และการหมดเวลาโหลดหน้า ( driver.Manage().Timeouts().PageLoad.Add(System.TimeSpan.FromSeconds(30));) ตอนนี้รหัสของฉันมีลักษณะดังนี้:

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

แต่ตามที่ฉันได้กล่าวถึงวิธีการข้างต้นไม่สามารถแก้ปัญหาของฉันได้ฉันได้รับข้อผิดพลาดอย่างต่อเนื่องและกระบวนการ chromedriver.exe และ chrome.exe หลายรายการทำงานอยู่ (~ 10 ของ chromedriver และ ~ 50 ของ chrome)

บางที่ฉันอ่านว่าหลังจากกำจัดไดรเวอร์แล้วฉันควรรอสองสามวินาทีก่อนเริ่มการทดสอบครั้งต่อไปดังนั้นฉันจึงเพิ่มบรรทัดต่อไปนี้เพื่อกำจัดวิธีการ:

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

ด้วยการปรับเปลี่ยนโหมดสลีปนี้ฉันไม่ได้รับข้อผิดพลาดการหมดเวลาอีกต่อไปและไม่มีกระบวนการ chromedriver.exe และ chrome.exe ที่เปิดโดยไม่จำเป็น

ฉันหวังว่าฉันจะช่วยคนที่ต่อสู้กับปัญหานี้มานานเท่าที่ฉันทำ


0

ฉันมีข้อยกเว้นเหมือนกันเมื่อพยายามเรียกใช้ ChromeDriver แบบไม่มีหัวกับงานที่กำหนดเวลาไว้บนเซิร์ฟเวอร์ windows (ไม่ต้องดูแล) สิ่งที่แก้ไขได้สำหรับฉันคือการรันงานในฐานะผู้ใช้ " ผู้ดูแลระบบ " (สังเกต S ที่ท้าย) สิ่งที่ฉันทำด้วย (ฉันไม่รู้ว่าเกี่ยวข้องหรือไม่) คือเลือก "การเชื่อมต่อใด ๆ " จากแท็บงาน "เงื่อนไข"


-1

สำหรับ ChromeDriver ด้านล่างใช้ได้ผลสำหรับฉัน:

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

ซีลีเนียมเวอร์ชัน 3.11, ChromeDriver 2.37

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.