[python] 셀레늄으로 텍스트 영역에서 텍스트 지우기

특정 필드의 텍스트가 유효하지 않을 때 적절한 오류 메시지가 나타나는지 확인하는 테스트가 있습니다. 유효성 검사 중 하나는 특정 textarea 요소가 비어 있지 않은 것입니다.

이 텍스트 영역에 이미 텍스트가있는 경우 셀레늄에 필드를 지우도록 지시하려면 어떻게해야합니까?

같은 :

driver.get_element_by_id('foo').clear_field()



답변

driver.find_element_by_id('foo').clear()


답변

당신이 사용할 수있는

 webElement.clear();

이 요소가 텍스트 입력 요소이면 값이 지워집니다.

이 이벤트에서 발생한 이벤트는 예상과 다를 수 있습니다. 특히 키보드 나 마우스 이벤트는 발생하지 않습니다. 키보드 이벤트가 발생하도록하려면 다음과 같은 것을 사용하십시오 sendKeys(CharSequence). 예 :

 webElement.sendKeys(Keys.BACK_SPACE); //do repeatedly, e.g. in while loop

또는:

 webElement.sendKeys(Keys.CONTROL + "a");
 webElement.sendKeys(Keys.DELETE);


답변

.clear ()가 작동하지 않는 필드를 만났습니다. 처음 두 답변의 조합을 사용 하여이 분야에서 효과가있었습니다.

from selenium.webdriver.common.keys import Keys

#...your code (I was using python 3)

driver.find_element_by_id('foo').send_keys(Keys.CONTROL + "a");
driver.find_element_by_id('foo').send_keys(Keys.DELETE);


답변

최신 셀레늄 버전에서 다음을 사용하십시오.

driver.find_element_by_id('foo').clear()


답변

자바

driver.findelement(By.id('foo').clear();

또는

webElement.clear();

이 요소가 텍스트 입력 요소이면 값이 지워집니다.


답변

일반적인 구문입니다

driver.find_element_by_id('Locator value').clear();
driver.find_element_by_name('Locator value').clear();


답변

간단한 clear () 호출을 사용하면 DOM에서 해당 입력 / 텍스트 영역 구성 요소에 여전히 이전 값이있는 것으로 표시되므로 해당 구성 요소에 대한 다음 변경 사항 (예 : 구성 요소를 새 값으로 채움)은 제 시간에 처리되지 않습니다.

셀레늄 소스 코드를 보면 clear ()-method가 다음 주석과 함께 문서화되어 있음을 알 수 있습니다.

/ **이 요소가 텍스트 입력 요소이면 값이 지워집니다. 다른 요소에는 영향을 미치지 않습니다. 텍스트 입력 요소는 INPUT 및 TEXTAREA 요소입니다. 이 이벤트에서 발생한 이벤트는 예상과 다를 수 있습니다. 특히 키보드 나 마우스 이벤트는 발생하지 않습니다. 키보드 이벤트가 발생하도록하려면 백 스페이스 키와 함께 {@link #sendKeys (CharSequence …)}와 같은 것을 사용하십시오. 변경 이벤트를 받으려면 탭 키를 사용하여 {@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;
}

이 코드는 Python이 아닌 Java 인 것이 유감입니다. 또한이 게시물을 너무 오래 만들 수있는 추가 “waitUntilPageIsReady ()-방법을 생략해야했습니다.

이것이 셀레늄으로 여행하는 데 도움이되기를 바랍니다!