ความแตกต่างระหว่างสิ่งเหล่านี้คืออะไร
Webdriver.Close()
Webdriver.Quit()
Webdriver.Dispose()
ต้องใช้อันไหนและเมื่อไหร่?
ความแตกต่างระหว่างสิ่งเหล่านี้คืออะไร
Webdriver.Close()
Webdriver.Quit()
Webdriver.Dispose()
ต้องใช้อันไหนและเมื่อไหร่?
คำตอบ:
นี่เป็นคำถามที่ดีที่ฉันเห็นคนใช้ปิด () เมื่อพวกเขาไม่ควร ฉันดูในซอร์สโค้ดสำหรับลูกค้าซีลีเนียม & WebDriver C # Bindings และพบสิ่งต่อไปนี้
webDriver.Close()
- ปิดหน้าต่างเบราว์เซอร์ที่ไดรเวอร์มีโฟกัสอยู่ webDriver.Quit()
- โทรทิ้ง () webDriver.Dispose()
ปิดหน้าต่างเบราว์เซอร์ทั้งหมดจบลงได้อย่างปลอดภัยและเซสชั่นรหัสด้านล่างจะกำจัดวัตถุไดรเวอร์สิ้นสุดเซสชันและปิดเบราว์เซอร์ทั้งหมดที่เปิดในระหว่างการทดสอบว่าการทดสอบล้มเหลวหรือผ่าน
public IWebDriver Driver;
[SetUp]
public void SetupTest()
{
Driver = WebDriverFactory.GetDriver();
}
[TearDown]
public void TearDown()
{
if (Driver != null)
Driver.Quit();
}
โดยสรุปให้แน่ใจว่ามีการเรียก Quit () หรือ Dispose () ก่อนออกจากโปรแกรมและไม่ใช้วิธีการปิด () เว้นแต่คุณจะแน่ใจในสิ่งที่คุณทำ
หมายเหตุ
ผมพบว่าคำถามนี้เมื่อพยายามที่จะคิดออกว่าทำไมปัญหาที่เกี่ยวข้อง VM ของฉันกำลังวิ่งออกจากพื้นที่ harddrive ปรากฎว่ามีข้อยกเว้นทำให้ Quit () หรือ Dispose () ไม่ถูกเรียกทุกครั้งที่เรียกใช้ซึ่งทำให้โฟลเดอร์ appData เติมฮาร์ดไดรฟ์ ดังนั้นเราจึงได้ใช้ออกจาก () วิธีการอย่างถูกต้อง แต่รหัสไม่สามารถเข้าถึง สรุปตรวจสอบให้แน่ใจว่าพา ธ ของรหัสทั้งหมดจะล้างวัตถุที่ไม่มีการจัดการของคุณโดยใช้รูปแบบที่ปลอดภัยยกเว้นหรือใช้ IDisposable
นอกจากนี้
ในกรณีของ RemoteDriver การเรียก Quit () หรือ Dispose () จะปิดเซสชันในเซิร์ฟเวอร์ Selenium ด้วย หากเซสชั่นไม่ได้ปิดไฟล์บันทึกสำหรับเซสชันนั้นจะยังคงอยู่ในหน่วยความจำ
Quit()
คือการเปลี่ยนเส้นทางไปDispose()
Close()
- มันถูกใช้เพื่อปิดเบราว์เซอร์หรือหน้าปัจจุบันซึ่งมีโฟกัส
Quit()
- มันถูกใช้เพื่อปิดตัวลงเช่นไดรเวอร์เว็บหรือทำลายเช่นไดรเวอร์เว็บ (ปิดหน้าต่าง)
Dispose()
- ฉันไม่ทราบวิธีนี้
Quit
และDispose
วิธีการควรเป็นคำพ้องความหมายซึ่งกันและกัน ในคำอื่น ๆโทรQuit
Dispose
driver.close
และdriver.quit
มีสองวิธีที่แตกต่างกันสำหรับการปิดเซสชันเบราว์เซอร์ใน Selenium WebDriver การทำความเข้าใจทั้งคู่และการรู้ว่าเมื่อใดควรใช้แต่ละวิธีเป็นสิ่งสำคัญในการทดสอบของคุณ ดังนั้นผมจึงได้พยายามที่จะหลั่งน้ำตาแสงบางอย่างเกี่ยวกับทั้งสองวิธีการเหล่านี้
driver.close
- วิธีนี้จะปิดหน้าต่างเบราว์เซอร์ที่ตั้งโฟกัสไว้ แม้จะมีชื่อที่คุ้นเคยสำหรับวิธีการนี้WebDriver
ไม่ได้ใช้อินเตอร์เฟซAutoCloseable
driver.quit
- วิธีการนี้โดยทั่วไปเรียกdriver.dispose
วิธีการภายในตอนนี้ซึ่งจะปิดหน้าต่างเบราว์เซอร์ทั้งหมดและจบเซสชัน WebDriver อย่างงดงาม
driver.dispose
- ดังกล่าวก่อนหน้านี้เป็นวิธีการภายในของ WebDriver ที่ได้รับการลดลงอย่างเงียบ ๆ ตามคำตอบอื่น - การตรวจสอบที่จำเป็น วิธีนี้ไม่มีกรณีการใช้งานในเวิร์กโฟลว์การทดสอบตามปกติเนื่องจากวิธีการก่อนหน้านี้ควรใช้กับกรณีการใช้งานส่วนใหญ่
กรณีการใช้คำอธิบาย: คุณควรใช้driver.quit
เมื่อใดก็ตามที่คุณต้องการที่จะจบโปรแกรม มันจะปิดหน้าต่างเบราว์เซอร์ที่เปิดอยู่ทั้งหมดและยุติเซสชัน WebDriver หากคุณไม่ได้ใช้driver.quit
เมื่อสิ้นสุดโปรแกรมเซสชัน WebDriver จะปิดอย่างไม่ถูกต้องและไฟล์จะไม่ถูกล้างออกจากหน่วยความจำ ซึ่งอาจส่งผลให้เกิดข้อผิดพลาดการรั่วไหลของหน่วยความจำ
คำอธิบายข้างต้นควรอธิบายความแตกต่างระหว่างdriver.close
และdriver.quit
วิธีการใน WebDriver ฉันหวังว่าคุณพบว่ามีประโยชน์.
เว็บไซต์ต่อไปนี้มีเคล็ดลับที่ดีบางอย่างเกี่ยวกับการทดสอบซีลีเนียม: การเชื่อมโยง
quit()
: ออกจากไดรเวอร์นี้โดยปิดทุกหน้าต่างที่เกี่ยวข้องที่เปิดอยู่
close()
: ปิดหน้าต่างปัจจุบันออกจากเบราว์เซอร์หากเป็นหน้าต่างสุดท้ายที่เปิดอยู่
ปิด (): - สมมติว่าคุณเปิดหน้าต่างเบราว์เซอร์หลายหน้าต่างพร้อมอินสแตนซ์ไดรเวอร์เดียวกันตอนนี้การเรียกปิด () บนอินสแตนซ์ของไดรเวอร์จะปิดหน้าต่างปัจจุบันที่มีการชี้ไปที่อินสแตนซ์ของไดรเวอร์ แต่อินสแตนซ์ของไดรเวอร์ยังคงอยู่ในหน่วยความจำและสามารถใช้เพื่อจัดการหน้าต่างเบราว์เซอร์ที่เปิดอยู่
ออกจาก (): - ถ้าคุณเรียกเลิก () ในอินสแตนซ์ของไดรเวอร์และมีหน้าต่างเบราว์เซอร์เปิดตั้งแต่หนึ่งหน้าต่างขึ้นไปมันจะปิดหน้าต่างเบราว์เซอร์ที่เปิดอยู่ทั้งหมดและอินสแตนซ์ของไดรเวอร์คือขยะที่เก็บรวบรวมเช่น ดังนั้นตอนนี้คุณไม่สามารถใช้อินสแตนซ์ของไดรเวอร์นี้เพื่อดำเนินการอื่นหลังจากเรียกเลิก () บนมัน ถ้าคุณทำมันจะโยนข้อยกเว้น
ทิ้ง (): - ฉันไม่คิดว่าจะมีวิธีการกำจัดสำหรับอินสแตนซ์ WebDriver
คุณสามารถไปที่ลิงค์ java doc ซีลีเนียมอย่างเป็นทางการนี้เพื่ออ้างอิง
ขึ้นอยู่กับปัญหา Github ของ PhantomJS การเลิก () ไม่ได้ยุติกระบวนการ PhantomJS คุณควรใช้:
import signal
driver = webdriver.PhantomJS(service_args=service_args)
# Do your work here
driver.service.process.send_signal(signal.SIGTERM)
driver.quit()
ปิด ()เป็นคำสั่งที่ webdriver ซึ่งปิดหน้าต่างเบราว์เซอร์ซึ่งขณะนี้อยู่ในโฟกัส แม้จะมีชื่อที่คุ้นเคยสำหรับวิธีการนี้WebDriver
ไม่ได้ใช้อินเตอร์เฟซAutoCloseable
ในระหว่างกระบวนการอัตโนมัติหากมีมากกว่าหนึ่งหน้าต่างเบราว์เซอร์ที่เปิดอยู่คำสั่งปิด () จะปิดเฉพาะหน้าต่างเบราว์เซอร์ปัจจุบันที่กำลังโฟกัสในเวลานั้น หน้าต่างเบราว์เซอร์ที่เหลือจะไม่ถูกปิด รหัสต่อไปนี้สามารถใช้เพื่อปิดหน้าต่างเบราว์เซอร์ปัจจุบัน:
ออกจาก ()เป็นคำสั่ง webdriver ซึ่งเรียกวิธี driver.dispose ซึ่งจะปิดหน้าต่างเบราว์เซอร์ทั้งหมดและยุติเซสชัน WebDriver หากเราไม่ใช้เลิก () เมื่อสิ้นสุดโปรแกรมเซสชัน WebDriver จะไม่ถูกปิดอย่างถูกต้องและไฟล์จะไม่ถูกล้างออกจากหน่วยความจำ ซึ่งอาจส่งผลให้เกิดข้อผิดพลาดการรั่วไหลของหน่วยความจำ
หากกระบวนการทำงานอัตโนมัติเปิดเพียงหน้าต่างเบราว์เซอร์เดียวคำสั่งปิด () และเลิก () จะทำงานในลักษณะเดียวกัน ทั้งสองจะแตกต่างกันในฟังก์ชันการทำงานเมื่อมีหน้าต่างเบราว์เซอร์เปิดมากกว่าหนึ่งหน้าต่างในระหว่างการทำงานอัตโนมัติ
สำหรับ Ref ด้านบน: คลิกที่นี่
Dispose Command Dispose () ควรเรียก Quit () และมันจะปรากฏขึ้น อย่างไรก็ตามมันก็มีปัญหาเดียวกันกับที่การกระทำใด ๆ ที่ตามมาจะถูกบล็อกจนกว่า PhantomJS จะถูกปิดด้วยตนเอง
ลิงก์อ้างอิง
ความแตกต่างระหว่าง driver.close () และ driver.quit ()
driver.close - มันปิดหน้าต่างเบราว์เซอร์ที่ตั้งโฟกัสไว้
driver.quit - โดยทั่วไปจะเรียกวิธีการ driver.dispose ซึ่งจะปิดหน้าต่างเบราว์เซอร์ทั้งหมดและจบเซสชัน WebDriver อย่างสง่างาม
ซีลีเนียม WebDriver
WebDriver.Close()
วิธีนี้ใช้เพื่อปิดหน้าต่างที่เปิดอยู่ในปัจจุบัน มันปิดหน้าต่างที่เปิดอยู่ในปัจจุบันซึ่งคนขับมีสมาธิอยู่
WebDriver.Quit()
วิธีนี้ใช้เพื่อทำลายอินสแตนซ์ของ WebDriver มันปิดเบราว์เซอร์ Windows ทั้งหมดที่เกี่ยวข้องกับไดรเวอร์นั้นและสิ้นสุดเซสชันอย่างปลอดภัย การโทรของ WebDriver.Quit ()
WebDriver.Dispose()
วิธีนี้จะปิดหน้าต่างเบราว์เซอร์ทั้งหมดและจบเซสชันอย่างปลอดภัย
ความเข้าใจของฉันdriver.close();
จะปิดเบราว์เซอร์ปัจจุบันและdriver.quit();
จะยุติเบราว์เซอร์ทั้งหมดที่