2013-03-01 14 views
11

Recentemente ho avuto un problema con il selenio dove chiamare clear() in una casella di testo personalizzata causa problemi durante l'immissione del testo più avanti nel test. La casella di testo controlla (JavaScript) browserEvents, in particolare gli eventi keyDown. Ho provato a capire cosa fa clear() per vedere se questo potrebbe influenzare le cose, ma non riesco a trovare alcun dettaglio specifico.Cosa fa WebElement.clear() a TextBoxes?

La sorgente per le associazioni Java Selenio shows that clear() does not use keyboard or mouse simulation per rimuovere il testo dalla casella di testo. Allora, cosa fa esattamente?

risposta

25

Procedimento clear() esegue un "Automation Atom", che è una funzione JavaScript destinato a fornire la più piccola unità di base della funzionalità di automazione per un browser. Nel caso di clear(), tale funzione imposta la proprietà value dell'elemento su una stringa vuota (''), quindi attiva l'evento onchange sull'elemento. La funzione degli atomi che ti interessa è bot.action.clear()

+0

Ciao, ho estratto questo post, perché volevo vedere il codice sorgente di 'WebElement.clear()', ma i collegamenti che hai fornito non sono più attivi. Sarei infinitamente grato se tu potessi dirmi dove guardare da quando sono rimasto bloccato ... – DCzo

+0

Vai al wiki per [Automation Atoms] (https://github.com/SeleniumHQ/selenium/wiki/Automation-Atoms). C'è un link in fondo che ti porta al file di build. – MikeJRamsey56

4

Ecco cosa farà esattamente clear(). La funzione cancellerà il valore della casella di testo e abiliterà la casella di testo. Prima di inserire il testo nel campo di testo, è necessario cancellare il campo di testo e abilitarlo. Se non usiamo clear(), non possiamo inserire alcun valore nel campo di testo usando il selenio.

driver.find_element_by_xpath(xpath).clear() 
driver.find_element_by_xpath(xpath).send_keys("data") 
+0

Questa risposta non è corretta. Non è necessario 'clear()' la casella di testo per abilitarlo. Dovresti usare 'clear()' per cancellare qualsiasi testo esistente nella casella di testo prima di inserire un nuovo valore. La risposta di Jim è corretta ed è più dettagliata dal punto di vista tecnico. – JeffC