Sử dụng dưới phương pháp để chờ đợi cho một phần tử:
public boolean waitForElementToBePresent(By by, int waitInMilliSeconds) throws Exception
{
int wait = waitInMilliSeconds;
int iterations = (wait/250);
long startmilliSec = System.currentTimeMillis();
for (int i = 0; i < iterations; i++)
{
if((System.currentTimeMillis()-startmilliSec)>wait)
return false;
List<WebElement> elements = driver.findElements(by);
if (elements != null && elements.size() > 0)
return true;
Thread.sleep(250);
}
return false;
}
Và dưới đây là phương pháp chờ trang tải:
public void waitForPageLoadingToComplete() throws Exception {
ExpectedCondition<Boolean> expectation = new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
return ((JavascriptExecutor) driver).executeScript(
"return document.readyState").equals("complete");
}
};
Wait<WebDriver> wait = new WebDriverWait(driver, 30);
wait.until(expectation);
}
Giả sử bạn đang đợi tải trang. Sau đó, gọi phương thức thứ nhất với thời gian chờ đợi và bất kỳ phần tử nào xuất hiện sau khi tải trang, sau đó nó sẽ trả về true
, một cách khôn ngoan khác false
. Sử dụng nó như,
waitForElementToBePresent(By.id("Something"), 20000)
Hàm được gọi ở trên đợi cho đến khi tìm thấy phần tử đã cho trong khoảng thời gian nhất định.
Hãy thử bất kỳ mã dưới đây sau khi phương pháp trên
WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id<locator>));
hoặc
wait.until(ExpectedConditions.elementToBeClickable(By.id<locator>));
Cập nhật:
public boolean waitForTextFiled(By by, int waitInMilliSeconds, WebDriver wdriver) throws Exception
{
WebDriver driver = wdriver;
int wait = waitInMilliSeconds;
int iterations = (wait/250);
long startmilliSec = System.currentTimeMillis();
for (int i = 0; i < iterations; i++)
{
if((System.currentTimeMillis()-startmilliSec)>wait)
return false;
driver.findElement(By.id("txt")).sendKeys("Something");
String name = driver.findElement(by).getAttribute("value");
if (name != null && !name.equals("")){
return true;
}
Thread.sleep(250);
}
return false;
}
này sẽ cố gắng văn bản nhập vào đến lĩnh vực văn bản cho đến thời điểm nhất định trong millis. Nếu getAttribute()
không phù hợp trong trường hợp sử dụng của bạn getText()
. Nếu văn bản được enetered thì nó trả về true. Đặt thời gian tối đa mà bạn có thể đợi đến.
cảm ơn vì đã xem xét @JimEvans này, tôi đã chỉnh sửa mã của mình và hiện chỉ sử dụng chế độ chờ thông thạo, nhưng không có lỗi nào và không làm bất kỳ điều gì. – user2254173