Tôi đang tìm một cái gì đó tương tự như waitForElementPresent
để kiểm tra xem phần tử có được hiển thị trước khi tôi nhấp vào phần tử đó hay không. Tôi nghĩ điều này có thể được thực hiện bằng implicitWait
, vì vậy tôi sử dụng như sau:WebDriver - đợi phần tử bằng cách sử dụng Java
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
và sau đó nhấp vào bởi
driver.findElement(By.id(prop.getProperty(vName))).click();
Thật không may, đôi khi nó chờ đợi cho các phần tử và đôi khi không. Tôi đã tìm một lúc và tìm thấy giải pháp này:
for (int second = 0;; second++) {
Thread.sleep(sleepTime);
if (second >= 10)
fail("timeout : " + vName);
try {
if (driver.findElement(By.id(prop.getProperty(vName)))
.isDisplayed())
break;
} catch (Exception e) {
writeToExcel("data.xls", e.toString(),
parameters.currentTestRow, 46);
}
}
driver.findElement(By.id(prop.getProperty(vName))).click();
Và nó chờ đợi, nhưng trước khi hết thời gian chờ đợi phải đợi 10 lần 5, 50 giây. Hơi nhiều. Vì vậy, tôi đặt hoàn toàn chờ đợi đến 1 giây và tất cả dường như tốt cho đến bây giờ. Bởi vì bây giờ một số điều chờ đợi 10s trước khi thời gian chờ nhưng một số những thứ khác hết thời gian sau 1s.
Làm thế nào để bạn bao gồm việc chờ phần tử hiện tại/hiển thị trong mã của bạn? Bất kỳ gợi ý nào đều đáng tin cậy.
Cảm ơn! Nếu tôi chỉ biết sớm hơn về lớp này, cuộc sống của tôi sẽ dễ dàng hơn :) – tom
Làm cách nào để kết hợp mã của bạn vào định dạng này?\t '@FindBy (cách = How.ID, sử dụng =" nút đăng ký ") \t WebElement signUpButton;' Hơn nữa, tôi vẫn nhận được mã NPE với mã của bạn. Dường như nó đang cố gắng để có được elementToBeClickable. Làm thế nào chúng ta có thể sử dụng phương thức này khi phần tử không được nạp? – HelloWorldNoMore