ด้วยการเรียก clear () แบบเรียบง่ายจะปรากฏใน DOM ที่ส่วนประกอบอินพุต / textarea ที่สอดคล้องกันยังคงมีค่าเก่าดังนั้นการเปลี่ยนแปลงใด ๆ ในองค์ประกอบดังกล่าว (เช่นการเติมส่วนประกอบด้วยค่าใหม่) จะไม่ถูกประมวลผลในเวลา
หากคุณดูในซอร์สโค้ดซีลีเนียมคุณจะพบว่าเมธอด clear () - มีการบันทึกไว้พร้อมกับความคิดเห็นต่อไปนี้:
/ ** หากองค์ประกอบนี้เป็นองค์ประกอบการป้อนข้อความสิ่งนี้จะล้างค่า ไม่มีผลกับองค์ประกอบอื่น ๆ องค์ประกอบการป้อนข้อความคือองค์ประกอบ INPUT และ TEXTAREA โปรดทราบว่าเหตุการณ์ที่เกิดขึ้นจากเหตุการณ์นี้อาจไม่เป็นอย่างที่คุณคาดหวัง โดยเฉพาะอย่างยิ่งเราจะไม่ยิงเหตุการณ์แป้นพิมพ์หรือเมาส์ หากคุณต้องการให้เหตุการณ์แป้นพิมพ์ถูกพิจารณาลองใช้บางอย่างเช่น {@link #sendKeys (CharSequence ... )} ด้วยปุ่ม backspace เพื่อให้แน่ใจว่าคุณได้รับเหตุการณ์การเปลี่ยนแปลงให้พิจารณาติดตามด้วยการโทรไปที่ {@link #sendKeys (CharSequence ... )} พร้อมกับปุ่มแท็บ * /
ดังนั้นเมื่อใช้คำแนะนำที่มีประโยชน์นี้เพื่อล้างอินพุต / ข้อความ (ส่วนประกอบที่มีค่าอยู่แล้ว) และกำหนดค่าใหม่ให้กับมันคุณจะได้รับโค้ดดังนี้:
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;
}
ขออภัยสำหรับรหัสนี้เป็น Java และไม่ใช่ Python นอกจากนี้ฉันต้องข้ามเมธอด "waitUntilPageIsReady () - เพิ่มเติมที่จะทำให้โพสต์นี้ยาวเกินไป
หวังว่านี่จะช่วยคุณในการเดินทางกับซีลีเนียม!