Với một lệnh gọi đơn giản là Clear () xuất hiện trong DOM rằng thành phần đầu vào / textarea tương ứng vẫn có giá trị cũ, do đó, bất kỳ thay đổi nào sau đây trên thành phần đó (ví dụ điền vào thành phần với giá trị mới) sẽ không được xử lý kịp thời.
Nếu bạn xem mã nguồn selen, bạn sẽ thấy rằng phương thức rõ ràng () - được ghi lại với nhận xét sau:
/ ** Nếu phần tử này là một phần tử nhập văn bản, điều này sẽ xóa giá trị. Không có tác dụng đối với các yếu tố khác. Các yếu tố nhập văn bản là các yếu tố INPUT và TEXTAREA. Lưu ý rằng các sự kiện được kích hoạt bởi sự kiện này có thể không như bạn mong đợi. Đặc biệt, chúng tôi không kích hoạt bất kỳ sự kiện bàn phím hoặc chuột. Nếu bạn muốn đảm bảo các sự kiện bàn phím được kích hoạt, hãy cân nhắc sử dụng một cái gì đó như {@link #sendKeys (CharSequence ...)} với phím xóa lùi. Để đảm bảo bạn nhận được một sự kiện thay đổi, hãy cân nhắc theo dõi bằng một cuộc gọi đến {@link #sendKeys (CharSequence ...)} bằng phím tab. * /
Vì vậy, bằng cách sử dụng gợi ý hữu ích này để xóa đầu vào / textarea (thành phần đã có giá trị) VÀ gán giá trị mới cho nó, bạn sẽ nhận được một số mã như sau:
public void waitAndClearFollowedByKeys(By by, CharSequence keys) {
LOG.debug("clearing element");
wait(by, true).clear();
sendKeys(by, Keys.BACK_SPACE.toString() + keys);
}
public void sendKeys(By by, CharSequence keysToSend) {
WebElement webElement = wait(by, true);
LOG.info("sending keys '{}' to {}", escapeProperly(keysToSend), by);
webElement.sendKeys(keysToSend);
LOG.info("keys sent");
}
private String escapeProperly(CharSequence keysToSend) {
String result = "" + keysToSend;
result = result.replace(Keys.TAB, "\\t");
result = result.replace(Keys.ENTER, "\\n");
result = result.replace(Keys.RETURN, "\\r");
return result;
}
Xin lỗi vì mã này là Java chứ không phải Python. Ngoài ra, tôi đã phải bỏ qua một phương thức "WaitUntilPageIsReady () - bổ sung sẽ khiến bài đăng này quá dài.
Hy vọng điều này sẽ giúp bạn trên hành trình của bạn với Selenium!