สามารถรอให้หน้าเว็บที่มี JavaScript ซับซ้อนโหลดเสร็จด้วย Selenium โดยตรวจสอบ document.readyState ให้คืนค่า 'complete' แล้วค่อยดำเนินการต่อ
ไวยากรณ์ (Syntax)
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("return document.readyState").toString().equals("complete");
จากนั้นใช้ Explicit Wait รอเงื่อนไข presenceOfElementLocated สำหรับองค์ประกอบที่ต้องการ ทำงานภายใน try-catch block
ตัวอย่างโค้ด (Java)
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.JavascriptExecutor;
public class PageLoadWt {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "C:\\Users\\ghs6kor\\Desktop\\Java\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://www.tutorialspoint.com/index.htm");
JavascriptExecutor j = (JavascriptExecutor)driver;
if (j.executeScript("return document.readyState").toString().equals("complete")) {
System.out.println("Page loaded properly.");
}
WebDriverWait wt = new WebDriverWait(driver, 3);
try {
wt.until(ExpectedConditions.presenceOfElementLocated(By.id("gsc-i-id1")));
driver.findElement(By.id("gsc-i-id1")).sendKeys("Selenium");
} catch (Exception e) {
System.out.println("Element not located");
}
driver.quit();
}
}
ผลลัพธ์
ภาพหน้าจอแสดงการทำงานของโค้ด (ดูภาพตัวอย่าง)