teachingwebdrivervideo / serenity-pageobject-junit

0 stars 0 forks source link

Bài 19: Timeouts và Waits ( Implicit Explicit ) #6

Open teachingwebdrivervideo opened 4 years ago

teachingwebdrivervideo commented 4 years ago

sleep(): Nó làm chậm các bài kiểm tra, làm cho chúng dễ vỡ hơn và có thể ẩn các vấn đề thực sự đến từ ứng dụng. Đáng sợ hơn, khi các bước test bị làm chậm một cách giả tạo bởi sleep(), không chỉ mất nhiều thời gian hơn để chạy và khắc phục các thử nghiệm hiện tại, mà còn mất nhiều thời gian hơn để phát triển các thử nghiệm mới:

1. Implicitly Wait webdriver.timeouts.implicitlywait = 30000: Chờ ngầm sẽ báo cho trình điều khiển web chờ trong khoảng thời gian xác định trước khi nó hết kiên nhẫn và đưa ra thông báo “No Such Element Exception”.

Thiết lập này tương đương với lệnh này: driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

Để thay đổi giá trí này trong code: setImplicitTimeout()

2. Explicit Wait webdriver.wait.for.timeout=20000 là thời gian timeout mặc định được sử dụng .

Để thay đổi giá trí này trong code: setWaitForTimeout()

Video hướng dẫn

teachingwebdrivervideo commented 4 years ago

Một số code mẫu tham khảo cách sử dụng

        @FindBy(id = "textBox")
        public WebElementFacade textbox;

        public void waitAndClick() {
            buttonThatIsEnabledLater.withTimeoutOf(Duration.ofSeconds(10)).click();
        }
        public WebElementFacade waitUntilVisibleButton() {
            return withTimeoutOf(Duration.ofSeconds(10))
                    .find(By.id("eventually-visible-button"));
        }
teachingwebdrivervideo commented 4 years ago

Đôi khi thời gian chờ không đủ chỉ đơn giản là chờ cho một button nào đó được enabled. Hoặc đôi khi bạn cần chờ một điều kiện gì đó xảy ra cho đến khi nó complete trên trang web trước khi tiếp tục. Hoặc bạn cần phải chờ đến khi dữ liệu từ server trả về phía trang web như kiểu một table cần chờ thời gian để load dữ liệu từ server để điền vào table đó chăng hạn.

Bạn có thể chờ những điều kiện này finished bằng việc sử dụng cách tích hợp Selenium ExpectedConditions như dưới đây.

        public void waitForVisibleTextToAppear() {
            waitForCondition().until(
                    ExpectedConditions.textToBePresentInElement(textbox, "Visible text")
            );
        }
teachingwebdrivervideo commented 4 years ago
    @Test
    public void waitingForVisibleTextExpectedCondition() {
        pageWithWaits.waitForCondition()
                .until(
                        ExpectedConditions.numberOfElementsToBe(
                                By.cssSelector("#elements option"), 4
                        )
                );
    }
teachingwebdrivervideo commented 4 years ago

Khi cần kiểm soát thời gian chờ chi tiết hơn, bạn có thể xác định thời gian chờ trực tiếp trong mã của mình, sử dụng phương thức withTimeoutOf (). Trong bất kỳ PageObject hoặc Action class nào, bạn có thể sử dụng phương pháp này để ghi đè thời gian chờ Fluent Wait:

public void clickOnButtonThatWillEventuallyAppear() {
      withTimeoutOf(Duration.ofSeconds(30))
                  .find(By.id("eventually-visible-button"))
                  .click()
}