เมื่อเราใช้ซีลีเนียมเพื่อจำลองการเข้าสู่ระบบหลังจากได้รับองค์ประกอบปุ่มเข้าสู่ระบบเราสามารถเรียกวิธีการคลิก () โดยตรงเพื่อให้ได้การกระโดดเข้าสู่ระบบและ webDriver ในเวลานี้ยังชี้ไปที่
นี่เป็นเรื่องปกติสำหรับหน้าปัจจุบัน แต่ควรสังเกตว่าเนื่องจากความเร็วในการโหลดหน้าเว็บโดยทั่วไปต่ำกว่าความเร็วในการทำงานของโปรแกรมก่อนที่จะได้รับองค์ประกอบของหน้าหลังจากเข้าสู่ระบบคุณสามารถใช้วิธี UTIL ของ WebDriverWait หรือคุณสามารถใช้เธรดโดยตรง () เพื่อให้โปรแกรมนอนหลับได้ชั่วขณะ (ไม่แนะนำ)
แต่ประเด็นหลักของบล็อกคือถ้าเราป้อนหน้าใหม่โดยคลิกที่ไฮเปอร์ลิงก์ปกติเราไม่สามารถรับองค์ประกอบหน้าใหม่ผ่านวิธีการด้านบนได้เนื่องจาก webDriver ในเวลานี้ยังคงชี้ไปที่หน้าก่อนหน้า
วิธีแก้ปัญหา: ก่อนอื่นรับที่จับทั้งหมดของหน้าต่างจากนั้นวนซ้ำผ่านคอลเลกชันที่จับนี้จนกว่าที่จับจะมีอยู่แตกต่างจากที่จับของหน้าต่างปัจจุบัน (ปัจจุบัน handle) และถ่ายโอน webdriver ก่อนหน้าไปยังหน้าชี้ไปที่มือจับใหม่
รหัสมีดังนี้:
สตริง currentWindow = driver.getWindowHandle (); // รับที่จับของชุดหน้าต่างปัจจุบัน <String> handles = driver.getWindowHandles (); // รับที่จับของ Iterator Windows ทั้งหมด <string> it = handles.iterator (); webDriver newDriver = null; ในขณะที่ (it.hasnext ()) {string handle = it.next (); if (! handle.equals (currentWindow)) {driver = driver.switchto (). หน้าต่าง (จับ); // สลับไปที่หน้าต่างเบรกที่ชี้ไปที่มือจับใหม่; -วิธีการแก้ปัญหาความล้มเหลวในการได้รับองค์ประกอบหน้าใหม่ตามซีลีเนียมคือเนื้อหาทั้งหมดที่ใช้ร่วมกันโดยตัวแก้ไข ฉันหวังว่ามันจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น