Tôi có một phương pháp hữu ích để chuyển sang cửa sổ cần thiết như hình dưới đây
public class Utility
{
public static WebDriver getHandleToWindow(String title){
//parentWindowHandle = WebDriverInitialize.getDriver().getWindowHandle(); // save the current window handle.
WebDriver popup = null;
Set<String> windowIterator = WebDriverInitialize.getDriver().getWindowHandles();
System.err.println("No of windows : " + windowIterator.size());
for (String s : windowIterator) {
String windowHandle = s;
popup = WebDriverInitialize.getDriver().switchTo().window(windowHandle);
System.out.println("Window Title : " + popup.getTitle());
System.out.println("Window Url : " + popup.getCurrentUrl());
if (popup.getTitle().equals(title)){
System.out.println("Selected Window Title : " + popup.getTitle());
return popup;
}
}
System.out.println("Window Title :" + popup.getTitle());
System.out.println();
return popup;
}
}
Nó sẽ đưa bạn đến cửa sổ mong muốn một lần tiêu đề của cửa sổ được thông qua như là tham số. Trong trường hợp của bạn, bạn có thể làm.
Webdriver childDriver = Utility.getHandleToWindow("titleOfChildWindow");
và sau đó lại chuyển sang cửa sổ cha mẹ sử dụng cùng một phương pháp
Webdriver parentDriver = Utility.getHandleToWindow("titleOfParentWindow");
Phương pháp này hoạt động hiệu quả khi đối phó với nhiều cửa sổ.
Nguồn
2013-10-01 09:50:18
Bây giờ tôi không thể nhập các giá trị trong hộp văn bản của cửa sổ mới thông qua mã của tôi.String parentHandle = driver.getWindowHandle(); \t \t \t driver.findElement (By.id ("ImageButton5")). Nhấp(); cho (Chuỗi winHandle: driver.getWindowHandles()) { \t \t driver.switchTo(). Window (winHandle); \t \t \t \t \t \t Thread.sleep (3000); \t \t \t driver.findElement (By.id ("txtEnterCptCode")). SendKeys ("99219"); driver.findElement (By.id ("chklstAllprocedure_0")). Click(); Lỗi tôi nhận được là không thể tìm thấy phần tử textbox trong cửa sổ mới được mở. Bạn có thể giúp tôi không? –
@Arun Kumar: có lẽ webDriver đang cố gắng tìm phần tử trước khi trang được tải đầy đủ? Thead.sleep không hiệu quả vì tất cả những gì cần làm là chờ một vài giây trước khi chạy các dòng mã tiếp theo. Hãy thử lớp WebDriverWait.:::: WebDriverWait wait = new WebDriverWait (trình điều khiển, 1000); WebElement element = wait.until (Điều kiện dự kiến.visibilityOfElementLocated (By.id ("txtEnterCptCode"))); element.sendKeys ("99219"); – CODEBLACK
WebDriverWait sẽ đợi cho đến khi phần tử được chỉ định của bạn hiển thị ... và khi nó hiển thị, nó sẽ tiếp tục chạy mã của bạn ... – CODEBLACK