Selenium Python PDF
Selenium Python PDF
Rilascio 2
Baiju Muthukadan
23 maggio 2017
Contenuti
1 Installazione 3
1.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Download Binding Python per Selenium. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Autisti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Dettagliato istruzioni per gli utenti di Windows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5 Downloading Server Selenium . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Ottenere Iniziato 7
2.1 Semplice Utilizzo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Esempio Spiegato. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Utilizzando Selenium per scrivere test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4 Camminare attraverso l'esempio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.5 Utilizzando Selenium con WebDriver remoto.......................... 10
3 Navigazione 13
3.1 Interazione con la pagina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2 Riempimento in forme14
3.3 Trascina e lasciare 15
3.4 Movimento tra finestre e telai 15
Popup 3.5 dialoghi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.6 Navigazione storia e posizione 16
3.7 Cookie 16
4 Localizzazione Elementi 17
4.1 Localizzazione per Id . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.2 Localizzazione per Nome ......................... 18
4.3 Localizzazione con XPath 19
4.4 Localizzazione Collegamenti ipertestuali per testo del link 20
4.5 Localizzazione Elementi per Nome Tag. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.6 Localizzazione Elementi per nome di classe21
4.7 Localizzazione Elementi per selettori CSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5 attese 23
5.1 Esplicito Attende. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.2 Implicito Aspetta24
6 Pagina Oggetti 27
io
6.1 Test caso27
6.2 Pagina classi di oggetti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.3 Pagina elementi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.4 Localizzatori 29
7 WebDriver API 31
7.1 Eccezioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
7.2 Azione Catene. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
7.3 Avvisi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
7.4 Speciale Chiavi39
7.5 Localizza elementi Di 41
7.6 Desiderato Capacità41
7.7 Utilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
7.8 Firefox WebDriver43
7.9 Chrome WebDriver44
7.10 Remoto WebDriver. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
7.11 WebElement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
7.12 UI Supporto56
7.13 Colore Sostenere. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.14 Atteso condizioni58
9 Indici e tavoli 65
ii
Selenium Python Bindings, Rilascio 2
AutoreBaiju Muthukadan
LicenzaQuesto documento è concesso in licenza sotto unCreative Commons Attribution-Condividi allo stesso modo 4.0 Internazionale
Licenza.
Nota: Questa non è una documentazione ufficiale. La documentazione ufficiale dell'API è disponibilequi.
Contenuti 1
Selenium Python Bindings, Rilascio 2
2 Contenuti
CAPITOLO 1
Installazione
Introduzione
I binding Python di Selenium offrono un'API semplice per scrivere test funzionali/di accettazione utilizzando Selenium WebDriver.
Attraverso l'API Python di Selenium puoi accedere a tutte le funzionalità di Selenium WebDriver in modo intuitivo.
I binding di Selenium per Python forniscono un'API conveniente per accedere ai WebDriver di Selenium come Firefox, Ie, Chrome, Remoto
ecc. Le versioni di Python attualmente supportate sono 2.7, 3.5 e superiori.
Questa documentazione spiega l'API Selenium 2 WebDriver. L'API Selenium 1 / Selenium RC non è trattata qui.
Puoi scaricare i bindings Python per Selenium daPagina PyPI per il pacchetto selenium. Tuttavia, un migliore ap-
l'approccio sarebbe quello di usarepipper installare il pacchetto selenium. Python 3.6 ha pip disponibile nellibreria standard. Usando
pip, puoi installare selenium in questo modo:
Autisti
Selenium richiede un driver per interfacciarsi con il browser scelto. Firefox, ad esempio, richiedegeckodriver, che
deve essere installato prima che gli esempi sottostanti possano essere eseguiti. Assicurati che sia nel tuo PATH, ad esempio, mettilo in /usr/bin o
/usr/local/bin.
La mancata osservanza di questo passaggio ti darà un errore [Link]: Messaggio: 'geck-
Il file eseguibile 'odriver' deve essere nel PATH.
3
Selenium Python Bindings, Rilascio 2
Altri browser supportati avranno i propri driver disponibili. Collegamenti ad alcuni dei driver dei browser più popolari
segui.
Chrome:[Link]
Filo [Link]
Firefox [Link]
Safari Unable to access external links.
Nota: È necessario avere una connessione a Internet per eseguire questa installazione.
1. Installa Python 3.6 utilizzando ilMSI disponibile nella pagina di download di [Link].
2. Avvia un prompt dei comandi utilizzando il programma [Link] e esegui il comando pip come indicato di seguito per installare
selenio.
Ora puoi eseguire i tuoi script di test utilizzando Python. Ad esempio, se hai creato uno script basato su Selenium e lo hai salvato
dentro C:\my_selenium_script.py, puoi eseguirlo in questo modo:
C:\Python35\[Link] C:\my_selenium_script.py
Nota: Il server Selenium è necessario solo se desideri utilizzare il WebDriver remoto. Vedi ilUtilizzando Selenium
con WebDriver remotosezione per ulteriori dettagli. Se sei un principiante che sta imparando Selenium, puoi saltare questa sezione
e procedere con il capitolo successivo.
Il server Selenium è un programma Java. Si consiglia di utilizzare Java Runtime Environment (JRE) 1.6 o una versione più recente per eseguirlo.
Server Selenium.
Puoi scaricare il server Selenium 2.x dapagina di download del sito web di seleniumIl nome del file dovrebbe essere qualche-
una cosa del genere: [Link]. Puoi sempre scaricare l'ultima versione 2.x
del server Selenium.
Se l'ambiente di esecuzione Java (JRE) non è installato nel tuo sistema, puoi scaricare ilJRE dal sito web di Oracle.
Se stai utilizzando un sistema GNU/Linux e hai accesso come root al tuo sistema, puoi anche utilizzare il tuo sistema operativo
istruzioni per installare JRE.
Se il comando ifjavacommand è disponibile nel PATH (variabile di ambiente), puoi avviare il server Selenium utilizzando questo com-
comando
java-jar [Link]
Sostituisci 2.x.x con la versione effettiva del server Selenium che hai scaricato dal sito.
Se JRE è installato come utente non root e/o se non è disponibile nel PATH (variabile ambiente), puoi digitare il
percorso relativo o assoluto al comando java. Allo stesso modo, puoi fornire un percorso relativo o assoluto al server Selenium
file jar. Quindi, il comando apparirà qualcosa di simile a questo:
4 Capitolo 1. Installazione
Binding Python di Selenium, Rilascio 2
/percorso/per/java-jar/percorso/per/[Link]
6 Capitolo 1. Installazione
CAPITOLO 2
Iniziare
Utilizzo semplice
Se hai installato i binding di Selenium per Python, puoi iniziare a usarlo da Python in questo modo.
da selenium importwebdriver
da [Link] importChiavi
driver=[Link]()
[Link]("[Link]
[Link]
elem=driver.find_element_by_name("q")
[Link]()
elem.invia_tasti("pycon")
elem.invia_tasti([Link])
asserireNessun risultato [Link] indriver.page_source
[Link]()
Lo script sopra può essere salvato in un file (ad es.: python_org_search.py), quindi può essere eseguito in questo modo:
python python_org_search.py
Esempio spiegato
Il modulo [Link] fornisce tutte le implementazioni di WebDriver. Attualmente sono supportate le implementazioni di WebDriver.
Le annotazioni sono Firefox, Chrome, IE e Remoto. La classe TheKeys fornisce tasti sulla tastiera come INVIO, F1, ALT
ecc.
da selenium importarewebdriver
da [Link] importChiavi
7
Selenium Python Bindings, Rilascio 2
driver=[Link]()
Il metodo [Link] navigherà a una pagina data dall'URL. WebDriver attenderà finché la pagina non è stata completamente caricata.
(cioè, l'evento "onload" è scattato) prima di restituire il controllo al tuo test o script. Vale la pena notare che se la tua pagina
utilizza molto AJAX al caricamento, quindi WebDriver potrebbe non sapere quando è completamente caricato.
[Link]("[Link]
La riga successiva è un'affermazione per confermare che il titolo contiene la parola "Python":
WebDriver offre diversi modi per trovare elementi utilizzando uno dei metodi find_element_by_*. Ad esempio, il
L'elemento di input può essere localizzato dal suo attributo name utilizzando il metodo find_element_by_name. Spiegazione dettagliata di
trovare elementi è disponibile nelLocalizzare gli Elementicapitolo
elem=driver.find_element_by_name("q")
Successivamente inviamo i tasti, questo è simile all'immissione dei tasti utilizzando la tua tastiera. I tasti speciali possono essere inviati utilizzando Keys
classe importata da [Link]. Per sicurezza, prima cancelleremo qualsiasi testo precompilato nell'input
campo (ad esempio "Cerca") in modo che non influisca sui nostri risultati di ricerca:
[Link]()
elem.invia_tasti("pycon")
elem.invia_chiavi([Link])
Dopo l'invio della pagina, dovresti ricevere il risultato se ce ne sono. Per garantire che vengano trovati alcuni risultati, fai un
affermazione:
Infine, la finestra del browser è chiusa. Puoi anche chiamare il metodo quit invece di close. Il quit chiuderà l'intero browser.
mentre 'chiudi' chiuderà una scheda, ma se era aperta solo una scheda, per impostazione predefinita la maggior parte dei browser uscirà completamente.
[Link]()
Selenium è principalmente utilizzato per scrivere casi di test. Il pacchetto selenium stesso non fornisce uno strumento/framework di test.
Puoi scrivere casi di test utilizzando il modulo unittest di Python. Le altre opzioni per uno strumento/framework sono [Link] e nose.
In questo capitolo, usiamo unittest come framework di scelta. Ecco l'esempio modificato che utilizza il modulo unittest.
Questo è un test per la funzionalità di ricerca di [Link]:
importa unittest
da selenium importawebdriver
[Link]
classPythonOrgSearch([Link]):
defsetUp(self):
[Link]=[Link]()
8 Capitolo 2. Iniziare
Binding di Selenium per Python, Rilascio 2
deftest_ricerca_in_python_org(self):
driver=[Link]
[Link]("[Link]
[Link]("Python", [Link])
elem=driver.find_element_by_name("q")
elem.send_keys("pycon")
elem.invia_chiavi([Link])
affermareNessun risultato [Link] indriver.page_source
defsmontare(self):
[Link]()
se__main__
[Link]()
python test_python_org_search.py
.
----------------------------------------------------------------------
Ran1testin15,566s
OK
Inizialmente, vengono importati tutti i moduli di base [Link] modulo è un componente integrato di Python basato su JUnit di Java.
Questo modulo fornisce il quadro per organizzare i casi di test. Il modulo [Link] fornisce tutto il
Implementazioni di WebDriver. Le implementazioni di WebDriver attualmente supportate sono Firefox, Chrome, Ie e Remoto.
La classe Keys fornisce tasti nella tastiera come RETURN, F1, ALT ecc.
importa unittest
da selenium importarewebdriver
da [Link] importaChiavi
La classe del case di test è ereditata da [Link]. Ereditarlo dalla classe TestCase è il modo per dire al modulo unittest
che questo sia un caso di prova:
classPythonOrgSearch([Link]):
Il setUp fa parte dell'inizializzazione, questo metodo verrà chiamato prima di ogni funzione di test che scriverai.
in questa classe di casi di test. Qui stai creando l'istanza di Firefox WebDriver.
defsetUp(self):
[Link]=[Link]()
Questo è il metodo del caso di test. Il metodo del caso di test dovrebbe sempre iniziare con characterstest. La prima riga all'interno di questo
metodo crea un riferimento locale all'oggetto driver creato nel metodo setUp.
deftest_search_in_python_org(self):
driver=[Link]
Il metodo [Link] navigherà a una pagina data dall'URL. WebDriver attenderà fino a quando la pagina non sarà completamente caricata.
(cioè, l'evento "onload" è scattato) prima di restituire il controllo al tuo test o script. Vale la pena notare che se la tua pagina
utilizza molto AJAX al caricamento quindi WebDriver potrebbe non sapere quando è completamente caricato.
[Link]("[Link]
La riga successiva è un'affermazione per confermare che il titolo contiene la parola "Python":
[Link]("Python", [Link])
WebDriver offre una serie di modi per trovare elementi utilizzando uno dei metodi find_element_by_*. Ad esempio, il
L'elemento di input può essere localizzato tramite il suo attributo name utilizzando il metodo find_element_by_name. Spiegazione dettagliata di
la ricerca di elementi è disponibile nelLocalizzare Elementicapitolo
elem=driver.trova_elemento_per_nome("q")
Successivamente stiamo inviando tasti, questo è simile all'inserimento di tasti utilizzando la tastiera. Tasti speciali possono essere inviati utilizzando Keys.
elem.invia_tasti("pycon")
elem.send_keys([Link])
Dopo l'invio della pagina, dovresti ricevere risultati in base alla ricerca, se ce ne sono. Per assicurarti che vengano trovati alcuni risultati,
fai un'asserzione:
Il metodo tearDown verrà chiamato dopo ogni metodo di test. Questo è un luogo per eseguire tutte le azioni di pulizia. Nella corrente
metodo, la finestra del browser viene chiusa. Puoi anche chiamare il metodo quit invece di close. Il quit uscirà completamente
il browser, mentre close chiuderà una scheda, ma se è l'unica scheda aperta, per impostazione predefinita la maggior parte dei browser uscirà completamente.
defsmontare(self):
[Link]()
Le righe finali sono del codice standard per eseguire il pacchetto di test:
se__main__
[Link]()
Per utilizzare il WebDriver remoto, devi avere il server Selenium in esecuzione. Per avviare il server, usa questo comando:
java-jar [Link]
Durante l'esecuzione del server Selenium, puoi vedere un messaggio che appare così:
La riga sopra dice che puoi utilizzare questo URL per connetterti a WebDriver remoto. Ecco alcuni esempi:
dalseleniumimportwebdriver
da [Link].desired_capabilities importCapacità Desiderate
10 Capitolo 2. Iniziare
Binding per Python di Selenium, Rilascio 2
driver=[Link](
[Link]
desired_capabilities=[Link])
driver=[Link](
[Link]
desired_capabilities=[Link])
driver=[Link](
command_executor='[Link]
desired_capabilities=[Link])
Le capacità desiderate sono un dizionario, quindi invece di utilizzare i dizionari predefiniti, puoi specificare i valori espliciti.
italia
driver=[Link](
[Link]
desired_capabilities={'browserName':'htmlunit',
2
javascriptAbilitatoVero})
12 Capitolo 2. Iniziare
CAPITOLO 3
Navigazione
La prima cosa che vorrai fare con WebDriver è navigare verso un link. Il modo normale per farlo è chiamando get
metodo
[Link]("[Link]
WebDriver attenderà fino a quando la pagina non è completamente caricata (cioè, l'evento onload è stato attivato) prima di restituire il controllo.
il tuo test o script. È importante notare che se la tua pagina utilizza molto AJAX al caricamento, allora WebDriver potrebbe non sapere quando
si è completamente caricato. Se hai bisogno di assicurarti che tali pagine siano completamente caricate, puoi usareaspetta.
element=driver.find_element_by_id("passwd-id")
elemento=driver.find_element_by_name("passwd")
element=driver.find_element_by_xpath("//input[@id='passwd-id']")
Puoi anche cercare un link dal suo testo, ma fai attenzione! Il testo deve essere una corrispondenza esatta! Dovresti anche stare attento
quando si utilizza XPATH in WebDriver. Se ci sono più di un elemento che corrisponde alla query, solo il primo sarà
restituito. Se non si trova nulla, verrà sollevata un'eccezione NoSuchElementException.
WebDriver ha un'API "basata sugli oggetti"; rappresentiamo tutti i tipi di elementi utilizzando la stessa interfaccia. Questo significa
anche se potresti vedere molti metodi possibili che potresti invocare quando premi il tasto di completamento automatico del tuo IDE
combinazione, non tutti avranno senso o saranno validi. Non ti preoccupare! WebDriver cercherà di fare la cosa giusta,
e se chiami un metodo che non ha senso (“setSelected()” su un tag “meta”, ad esempio) verrà sollevata un'eccezione
sollevato.
13
Selenium Python Bindings, Versione 2
Quindi, hai un elemento. Cosa puoi fare con esso? Prima di tutto, potresti voler inserire del testo in un campo di testo:
element.send_keys("del testo")
È possibile chiamare send_key su qualsiasi elemento, il che rende possibile testare le scorciatoie da tastiera come quelle utilizzate
su GMail. Un effetto collaterale di questo è che digitare qualcosa in un campo di testo non lo cancellerà automaticamente. Invece, quello che
il tipo verrà aggiunto a quello che c'è già. Puoi facilmente cancellare il contenuto di un campo di testo o di una textarea con clear
metodo
[Link]()
Compilazione di moduli
Abbiamo già visto come inserire del testo in un'area di testo o in un campo di testo, ma che dire degli altri elementi? Puoi "attivare"
lo stato a discesa, e puoi usare "setSelected" per impostare qualcosa come un tag OPTION selezionato. Gestendo con
SELECTtags non è male:
element=driver.find_element_by_xpath("//select[@name='name']")
all_options=element.find_elements_by_tag_name("opzione")
peropzioneinall_options
stampa("Il valore è:%s%option.get_attribute("value"))
[Link]()
Questo troverà il primo elemento "SELECT" sulla pagina e ciclerà attraverso ciascuna delle sue opzioni in sequenza, stampando
i loro valori, e selezionando ciascuno a turno.
Come puoi vedere, questo non è il modo più efficiente di gestire gli elementi SELECT. Le classi di supporto di WebDriver
includere uno chiamato "Seleziona", che fornisce metodi utili per interagire con questi:
da [Link] importSeleziona
select=Seleziona(driver.find_element_by_name('name'))
select.select_by_index(indice)
select.seleziona_per_testo_visibile("testo")
select.seleziona_per_valore(valore)
seleziona=Seleziona(driver.find_element_by_id('id'))
seleziona.deseleziona_tutto()
select=Seleziona(driver.find_element_by_xpath("xpath"))
tutte_le_opzioni_selezionate
opzioni=[Link]
14 Capitolo 3. Navigare
Selenium Python Bindings, Rilascio 2
Una volta che hai finito di compilare il modulo, probabilmente vuoi inviarlo. Un modo per farlo sarebbe trovare il
pulsante "invia" e cliccalo:
# Si presuppone che il pulsante abbia l'ID "submit" :)
driver.find_element_by_id("submit").click()
In alternativa, WebDriver ha il metodo di comodità "submit" su ogni elemento. Se chiami questo su un elemento all'interno di
un modulo, WebDriver percorrerà il DOM fino a trovare il modulo racchiudente e poi chiamerà submit su di esso. Se l'elemento
se non è in un modulo, allora verrà sollevata l'eccezione NoSuchElementException:
[Link]()
Trascina e rilascia
Puoi usare il trascinamento e rilascio, spostando un elemento di una certa quantità, o su un altro elemento:
elemento=driver.find_element_by_name("source")
target=driver.find_element_by_name("target")
da [Link] importareActionChains
catene_di_azione=ActionChains(driver)
action_chains.trascina_e_rilascia(elemento, obiettivo).esegui()
È raro che un'applicazione web moderna non abbia frame o sia vincolata a una sola finestra. WebDriver
supporta il passaggio tra finestre nominate utilizzando il metodo “switch_to_window”:
driver.switch_to_window("windowName")
Tutte le chiamate a driver saranno ora interpretate come dirette alla finestra particolare. Ma come fai a sapere il
nome della finestra? Dai un'occhiata al javascript o al link che l'ha aperta:
In alternativa, puoi passare un "handle della finestra" al metodo "switch_to_window()". Sapendo questo, è possibile
itera su ogni finestra aperta in questo modo:
permanigliaindriver.finestra_maniglie
driver.switch_to_finestra(handle)
Puoiancheoscillaredaunframeall'altro(oall'internodiiframe):
driver.switch_to_frame("nomeFrame")
È possibile accedere ai sottotrame separando il percorso con un punto, e puoi specificare il frame anche per il suo indice.
Cioè:
driver.switch_to_frame("[Link]")
andrebbe al frame chiamato "child" del primo sotto-frame del frame chiamato "frameName". Tutti i frame vengono valutati
come se da *top*.
Una volta che abbiamo finito di lavorare sugli frame, dovremo tornare al frame padre, il che può essere fatto usando:
driver.switch_to_default_content()
Dialoghi a comparsa
Selenium WebDriver ha il supporto integrato per gestire le finestre di dialogo popup. Dopo che hai attivato un'azione che avrebbe
apri un popup, puoi accedere all'alert con il seguente:
alert=driver.switch_to_alert()
Questo restituirà l'oggetto di avviso attualmente aperto. Con questo oggetto puoi ora accettare, scartare, leggere i suoi contenuti o addirittura
digita in un prompt. Questa interfaccia funziona altrettanto bene su avvisi, conferme, suggerimenti. Fare riferimento alla documentazione API
per ulteriori informazioni.
[Link]("[Link]
[Link]()
[Link]()
Si prega di essere consapevoli che questa funzionalità dipende interamente dal driver sottostante. È possibile che qualcosa
Può succedere l'inaspettato quando chiami questi metodi se sei abituato al comportamento di un browser rispetto a un altro.
Biscotti
Prima di lasciare questi prossimi passi, potresti essere interessato a capire come utilizzare i cookie. Prima di tutto, è necessario
essere sul dominio per cui il cookie sarà valido:
16 Capitolo 3. Navigare
CAPITOLO 4
Localizzare Elementi
Ci sono diverse strategie per individuare elementi in una pagina. Puoi utilizzare quella più appropriata per il tuo caso. Selenium
fornisce i seguenti metodi per localizzare elementi in una pagina:
•trova_elemento_per_id
•trova_elemento_per_nome
•trova_elemento_per_xpath
trova_elemento_per_testo_collegamento
•trova_elemento_per_testo_parziale_del_link
•trova_elemento_per_nome_tag
•trova_elemento_per_nome_classe
•trova_elemento_per_css_selector
Per trovare più elementi (questi metodi restituiranno un elenco):
•trova_elementi_per_nome
•trova_elementi_per_xpath
•trova_elementi_per_testo_collegamento
•trova_elementi_per_testo_parziale_del_collegamento
•trova_elementi_per_nome_tag
•trovare_elementi_per_nome_classe
•trova_elementi_per_selettore_css
Oltre ai metodi pubblici sopra menzionati, ci sono due metodi privati che potrebbero essere utili con i localizzatori nella pagina
oggetti. Questi sono i due metodi privati: trova_elemento et trova_elementi.
Esempio di utilizzo:
17
Selenium Python Bindings, Versione 2
da [Link] importDi
driver.find_element([Link],'//button[text()="Some text"]')
driver.find_elements([Link],'//button')
id
xpath
testo del link
testo del link parziale
nome
nome del tag
nome della classe
selettore css
Localizzazione per Id
Usa questo quando conosci l'attributo id di un elemento. Con questa strategia, il primo elemento con il valore dell'attributo id
la corrispondenza della posizione verrà restituita. Se nessun elemento ha un attributo matchingid, verrà sollevata un'eccezione NoSuchElementException
sarà sollevato.
Ad esempio, considera il codice sorgente di questa pagina:
<html>
<corpo>
<form id="loginForm">
<input name="username" type="text"/>
<input name="password" type="password"/>
continua
</form>
</corpo>
<html>
driver.find_element_by_id('loginForm')
Usa questo quando conosci l'attributo nome di un elemento. Con questa strategia, il primo elemento con il valore dell'attributo nome
La corrispondenza della posizione sarà restituita. Se nessun elemento ha un attributo nome corrispondente, verrà generata una NoSuchElementException.
sarà sollevato.
Ad esempio, considera il sorgente di questa pagina:
<html>
<body>
<formid="loginForm">
<inputname="username"type="text"/>
<inputname="password"type="password"/>
<inputname="continue"type="submit"value="Login"/>
continua
</form>
</body>
<html>
Gli elementi di nome utente e password possono essere localizzati in questo modo:
nome_utente=driver.find_element_by_name('nome_utente')
password=driver.find_element_by_name('password')
Questo darà il pulsante 'Accedi' poiché si verifica prima del pulsante 'Cancella':
continua=driver.trova_elemento_per_nome('continua')
XPath è il linguaggio utilizzato per localizzare nodi in un documento XML. Poiché HTML può essere un'implementazione di XML
(XHTML), gli utenti di Selenium possono sfruttare questo potente linguaggio per mirare agli elementi nelle loro applicazioni web. XPath
va oltre (oltre a supportare) i semplici metodi di localizzazione per id o attributi di nome, e apre a tutti i tipi
di nuove possibilità come localizzare la terza casella di controllo sulla pagina.
Uno dei motivi principali per usare XPath è quando non hai un attributo id o name adatto per l'elemento che
desideri localizzare. Puoi usare XPath per localizzare l'elemento in termini assoluti (non consigliato), o relativo a un elemento
che ha un attributo id o nome. I localizzatori XPath possono anche essere utilizzati per specificare elementi tramite attributi diversi da id
e nome.
Gli XPaths assoluti contengono la posizione di tutti gli elementi dalla radice (html) e, di conseguenza, è probabile che falliscano con solo
la minima regolazione all'applicazione. Trovando un elemento vicino con un attributo id o nome (idealmente un genitore
elemento) puoi localizzare il tuo elemento target in base alla relazione. Questo è molto meno probabile che cambi e può rendere
i tuoi test più robusti.
Ad esempio, considera il codice sorgente di questa pagina:
<html>
<corpo>
<formid="loginForm">
<input name="username" type="text"/>
password
<inputname="continue"type="submit"value="Login"/>
continua
</form>
</body>
<html>
driver.find_element_by_xpath("/html/body/form[1]")
driver.find_element_by_xpath("//form[1]")
driver.find_element_by_xpath("//form[@id='loginForm']")
1. Percorso assoluto (si interromperebbe se l'HTML venisse modificato anche solo leggermente)
driver.find_element_by_xpath("//form[input/@name='username']")
driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")
driver.find_element_by_xpath("//input[@name='username']")
1. Primo elemento di modulo con un elemento figlio di input con attributo denominato name e il valore username
2. Primo elemento figlio di input dell'elemento form con attributo namedid e valore loginForm
3. Primo elemento di input con attributo chiamato 'name' e il valore username
L'elemento del pulsante "Pulisci" può essere localizzato in questo modo:
driver.find_element_by_xpath("//input[@name='continue'][@type='button']
˓→ ")
driver.find_element_by_xpath("//form[@id='loginForm']/input[4]")
1. Input with attribute namednameand the valuecontinueand attribute namedtypeand the valuebutton
2. Quarto elemento figlio di input dell'elemento modulo con attributo denominato id e valore loginForm
Questi esempi coprono alcune basi, ma per imparare di più, si raccomandano i seguenti riferimenti:
• Tutorial di XPath di W3Schools
• Raccomandazione W3C XPath
• Guida a XPath- con esempi interattivi.
Ci sono anche un paio di componenti aggiuntivi molto utili che possono assistere nella scoperta dell'XPath di un elemento:
• Verificatore XPath- suggerisce XPath e può essere utilizzato per testare i risultati di XPath.
• Firebug- I suggerimenti XPath sono solo una delle molte potenti funzionalità di questo utilissimo componente aggiuntivo.
• Aiutante XPath- per Google Chrome
Usa questo quando conosci il testo del link utilizzato all'interno di un tag ancorato. Con questa strategia, il primo elemento con il
Il valore del testo del link corrispondente alla posizione verrà restituito. Se nessun elemento ha un attributo di testo del link corrispondente, un
Verrà sollevata un'eccezione NoSuchElementException.
<html>
<corpo>
<p>Sei sicuro di volerlo fare?</p>
<a href="[Link]">Continua</a>
<a href="[Link]">Annulla</a>
</corpo>
<html>
driver.find_element_by_link_text('Continua')
driver.find_element_by_partial_link_text('Conti')
Usa questo quando vuoi localizzare un elemento per nome del tag. Con questa strategia, il primo elemento con il nome del tag dato
verrà restituito. Se nessun elemento ha un nome di tag corrispondente, verrà sollevata un'eccezione NoSuchElementException.
<html>
<corpo>
<h1>Benvenuto</h1>
<p>Il contenuto del sito va qui.</p>
</body>
<html>
driver.find_element_by_tag_name('h1')
Usa questo quando vuoi localizzare un elemento in base al nome dell'attributo di classe. Con questa strategia, il primo elemento
verrà restituito il nome dell'attributo di classe corrispondente. Se nessun elemento ha un nome di attributo di classe corrispondente, un
Verrà sollevata un'eccezione NoSuchElementException.
<html>
<corpo>
Il contenuto del sito va qui.
</body>
<html>
driver.find_element_by_class_name('content')
Usa questo quando vuoi individuare un elemento tramite la sintassi del selettore CSS. Con questa strategia, il primo elemento con il
Un selettore CSS corrispondente verrà restituito. Se nessun elemento ha un selettore CSS corrispondente, verrà generata un'eccezione NoSuchElementException.
sarà sollevato.
Ad esempio, considera il sorgente di questa pagina:
<html>
<corpo>
<p class="content">Il contenuto del sito va qui.</p>
</body>
<html>
contenuto=driver.find_element_by_css_selector('[Link]')
Aspetta
Oggigiorno la maggior parte delle app web utilizza tecniche AJAX. Quando una pagina viene caricata dal browser, gli elementi
all'interno di quella pagina potrebbe essere caricata a intervalli di tempo diversi. Questo rende difficile localizzare gli elementi: se un elemento non è ancora
presente nel DOM, una funzione di localizzazione solleverà un'eccezione anElementNotVisibleException. Utilizzando i tempi di attesa, possiamo risolvere
questo problema. Attendere fornisce un certo margine tra le azioni eseguite - principalmente localizzare un elemento o qualsiasi altra operazione
con l'elemento.
Selenium Webdriver offre due tipi di attesa - implicita ed esplicita. Un'attesa esplicita fa sì che WebDriver attenda per un
una certa condizione deve verificarsi prima di procedere ulteriormente con l'esecuzione. Un'attesa implicita fa sì che WebDriver effettui polling del DOM
per un certo periodo di tempo quando si cerca di localizzare un elemento.
Attese Esplicite
Un'attesa esplicita è il codice che definisci per attendere che una certa condizione si verifichi prima di procedere ulteriormente nel codice.
Il caso estremo di questo è [Link](), che imposta la condizione a un periodo di tempo esatto da attendere. Ci sono alcuni
metodi di convenienza forniti che ti aiutano a scrivere codice che attenderà solo il tempo necessario. WebDriverWait in
La combinazione con ExpectedCondition è un modo per realizzare questo.
fromseleniumimportwebdriver
da [Link] importareDi
da [Link] importWebDriverWait
[Link] attesecomeCE
driver=[Link]()
[Link]("[Link]
prova:
element=WebDriverWait(driver,10).until(
EC.presenza_di_elemento_locato(([Link],"myDynamicElement"))
)
finalmente:
[Link]()
23
Selenium Python Bindings, Rilascio 2
Questo attende fino a 10 secondi prima di sollevare un TimeoutException a meno che non trovi l'elemento da restituire entro 10 secondi.
onds. WebDriverWait per impostazione predefinita chiama l'ExpectedCondition ogni 500 millisecondi fino a quando non restituisce con successo. A
il ritorno di successo è per ExpectedCondition tipo Boolean restituisce true o un valore non nullo restituisce valore per tutti gli altri Expected-
Tipi di condizione.
Condizioni previste
Ci sono alcune condizioni comuni che sono frequentemente utilizzate quando si automatizzano i browser web. Di seguito sono elencate
i nomi di ciascuno. Il binding di Selenium per Python fornisce alcunemetodi di convenienzaquindi non devi scrivere un
classe expected_condition o crea il tuo pacchetto di utilità per loro.
title_is
• titolo_contiene
presenza_di_elemento_locato
visibilità_del_elemento_posizionato
visibilità_di
presenza_di_tutti_gli_elementi_locati
testo_da_essere_presente_nell_elemento
testo_da_essere_presente_nel_valore_dell_elemento
• tela_da_essere_disponibile_e_passare_a_essa
invisibilità_dell_elemento_trovato
• elemento_da_cliccare
stato_di_stantio_di
• elemento_da_selezionare
• elemento_locato_da_selezionare
• stato_di_selezione_elemento_da_essere
• stato_selezione_elemento_locato_da_essere
l'allerta è presente
da [Link] importcondizioni_aspettatecomeCE
Aspetta=WebDriverWait(driver,10)
element=[Link](EC.element_to_be_clickable(([Link],'someid')))
Attese Implicite
Un'attesa implicita dice a WebDriver di interrogare il DOM per un certo periodo di tempo quando cerca di trovare qualsiasi elemento (o
elementi) non immediatamente disponibili. L'impostazione predefinita è 0. Una volta impostata, l'attesa implicita è impostata per la vita del
Oggetto WebDriver.
da selenium importawebdriver
driver=[Link]()
driver.attende_improvvisamente(10)secondi
24 Capitolo 5. Attese
Selenium Python Bindings, Rilascio 2
[Link]("[Link]
myDynamicElement=driver.trova_elemento_per_id("myDynamicElement")
26 Capitolo 5. Attese
CAPITOLO 6
Oggetti di Pagina
Questo capitolo è un'introduzione tutorial al pattern di design degli oggetti di pagina. Un oggetto di pagina rappresenta un'area nel web
interfaccia utente dell'applicazione con cui il tuo test sta interagendo.
Caso di test
Ecco un caso di test che cerca una parola nel sito [Link] e assicura che vengano trovati alcuni risultati.
importa unittest
dalselenimportwebdriver
importapagina
classePythonOrgRicerca([Link]):
Una classe di test di esempio per mostrare come funziona l'oggetto pagina
defsetUp(self):
[Link]=[Link]()
[Link]("[Link]
deftest_ricerca_in_python_org(self):
"""
Testa la funzionalità di ricerca di [Link]. Cerca la parola "pycon" e poi verifica
˓→ che alcuni risultati appaiano.
Si noti che non cerca alcun testo particolare nella pagina dei risultati di ricerca.
˓→ Questo test verifica che
i risultati non erano vuoti.
"""
27
Selenium Python Bindings, Rilascio 2
defsmonta(self):
[Link]()
se__main__
[Link]()
elementoDiRicercaClasse(ElementoBasePagina):
Questa classe ottiene il testo di ricerca dal localizzatore specificato
classeBasePaginaoggetto
Classe base per inizializzare la pagina principale che sarà chiamata da tutte le pagine
classePaginaPrincipale(BasePage):
I metodi di azione della home page vengono qui. Ad esempio, [Link]
defis_title_matches(self):
Verifica che il testo codificato "Python" appaia nel titolo della pagina
ritornaPythonin sé [Link]
defclicca_bottone_go(self):
Attiva la ricerca
element=[Link].find_element( MainPageLocators.GO_BUTTON)
*
[Link]()
paginaRisultatiRicercaClasse(BasePage):
I metodi di azione della pagina dei risultati di ricerca arrivano qui
defè_risultati_trovati(self)
Probabilmente dovresti cercare questo testo nella pagina specifica
# elemento, ma per ora funziona bene
restituireNessun risultato [Link] in sé [Link].page_source
da [Link] importaWebDriverWait
classeBasePaginaElemento(oggetto):
Classe base della pagina che viene inizializzata in ogni classe di oggetto pagina.
Localizzatori
Una delle pratiche è separare le stringhe di localizzazione dal luogo in cui vengono utilizzate. In questo esempio,
I localizzatori della stessa pagina appartengono alla stessa classe.
da [Link] importDi
classMainPageLocators(oggetto):
Una classe per i localizzatori della pagina principale. Tutti i localizzatori della pagina principale dovrebbero venire qui
([Link],'invia')
classSearchResultsPageLocators(oggetto):
Una classe per i localizzatori dei risultati di ricerca. Tutti i localizzatori dei risultati di ricerca devono provenire
˓→ qui
passa
API WebDriver
Le definizioni dell'API in questo capitolo mostrano la posizione assoluta delle classi. Tuttavia, lo stile di importazione raccomandato è
come indicato di seguito:
da selenium importarewebdriver
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]àDesiderate
[Link]
[Link]
[Link]
La classe delle chiavi speciali (Keys) può essere importata in questo modo:
[Link]
Le classi di eccezione possono essere importate in questo modo (Sostituisci ilNomeDellaClasseDiEccezione con la classe effettiva)
nome riportato di seguito):
31
Selenium Python Bindings, Rilasci 2
[Link][IlNomeDellaClasseDiEccezione]
Utilizzo:
driver.url_corrente
[Link]()
Eccezioni
Eccezioni che possono verificarsi in tutto il codice webdriver.
[Link](msg=None,
screen=None,
pila
trace=None)
Basi:[Link]
Scartato quando un elemento è presente nel DOM ma le interazioni con quell'elemento colpiranno un altro elemento.
a dipingere ordine
eccezione [Link](msg=None,
screen=None,
pila
trace=None)
Basi:[Link]
Lanciato quando si tenta di selezionare un elemento non selezionabile.
[Link](risposta,msg)
Basi:[Link] di [Link]
Sollevato quando si è verificato un errore sul lato server.
Questo può accadere quando si comunica con l'estensione firefox o il server del driver remoto.
[Link](msg=None,
screen=None,
mazzo
trace=None)
Basi:[Link]
Lanciato quando l'attivazione di un motore IME è fallita.
[Link](msg=None,
screen=None,stack-
traccia=None)
Basi:[Link] di [Link]
Generato quando il supporto IME non è disponibile. Questa eccezione viene generata per ogni chiamata di metodo correlata all'IME se l'IME
il supporto non è disponibile sulla macchina.
[Link](msg=None,
screen=None,stack-
trace=None)
Basi:[Link] di [Link]
Gli argomenti passati a un comando sono invalidi o malformati.
[Link](msg=None,
screen=None,
magazzino
trace=None)
Basi:[Link]
Sollevato quando si tenta di aggiungere un cookie sotto un dominio diverso da quello dell'URL attuale.
[Link](msg=None,
screen=None,
pila
trace=None)
Basi:eccezioni comuni di [Link]
[Link](msg=None,
screen=None,stack-
trace=None)
Basi:[Link]
Lanciato quando il selettore utilizzato per trovare un elemento non restituisce un WebElement. Attualmente questo solo
cosa succede quando il selettore è un'espressione xpath ed è sintatticamente non valida (cioè non è un xpath
espressione) o l'espressione non seleziona WebElements (ad es. “count(//input)”).
[Link](msg=None,
screen=None,
pila
trace=None)
Basi:[Link] di [Link]
Scatenato quando il frame o la finestra di destinazione da cambiare non esiste.
7.1. Eccezioni 33
Selenium Python Bindings, Rilascio 2
[Link](msg=None,
Nessuno
pila
Nessuno
Basi:[Link] di [Link]
Lanciato quando l'obiettivo fornito al metodo ActionsChainsmove() è non valido, cioè fuori dal documento.
[Link](msg=None,
screen=None, pila
traccia=None)
Basi:[Link]
Lanciato quando si passa a nessun avviso presentato.
Questo può essere causato dalla chiamata a un'operazione sulla classe Alert() quando un avviso non è ancora sullo schermo.
[Link](msg=None,
screen=None,stack-
trace=None)
Basi:[Link]
Sollevato quando l'attributo dell'elemento non può essere trovato.
Potresti voler controllare se l'attributo esiste nel particolare browser che stai testando. Alcuni browser
potrebbero avere nomi di proprietà diversi per la stessa proprietà. (Il .innerText di IE8 rispetto al .textContent di Firefox)
[Link](msg=None,
screen=None, mucchio
trace=None)
Basi:[Link]
Lanciato quando l'elemento non può essere trovato.
printdriver.finestra_maniglie
[Link](msg=None,
screen=None,
stack-
trace=None)
Basi:[Link]
[Link](msg=None,
screen=None,
pila
trace=None)
Basi:[Link]
Buttato quando un riferimento a un elemento è ora "obsoleto".
Stale significa che l'elemento non appare più nel DOM della pagina.
Le possibili cause di StaleElementReferenceException includono, ma non si limitano a:
Non sei più sulla stessa pagina, o la pagina potrebbe essere stata aggiornata da quando l'elemento è stato trovato.
• L'elemento potrebbe essere stato rimosso e riaggiunto allo schermo, poiché era localizzato. Come un
l'elemento viene trasferito. Questo può accadere tipicamente con un framework javascript quando i valori vengono
aggiornato e il nodo è ricostruito.
• L'elemento potrebbe essere stato all'interno di un iframe o di un altro contesto che è stato aggiornato.
eccezione [Link](msg=None,screen=None,stack-
trace=None)
Basi:[Link]
Gettato quando un comando non viene completato in tempo utile.
[Link](msg=None,
screen=None,
stacktrace=None)
Basi:[Link]
Generato quando un driver non riesce a impostare un cookie.
[Link](msg=None,
screen=None,
mucchio
trace=None,
alert_text=None)
Basi:[Link]
Sollevato quando appare un avviso inaspettato.
Di solito sollevato quando un modulo modale previsto blocca il webdriver dall'eseguire ulteriori comandi.
eccezione [Link](msg=None,
screen=None,
stacktrace=None)
Basi:[Link]
Manifestato quando una classe di supporto non ha ottenuto un elemento web atteso.
[Link](msg=None, screen=None,
stacktrace=None)
Bases: [Link]
Eccezione base webdriver.
Catene di Azione
L'implementazione di ActionChains,
[Link].action_chains.ActionChains(driver)
Basi:oggetto
ActionChains sono un modo per automatizzare interazioni a basso livello come i movimenti del mouse, le azioni dei pulsanti del mouse,
pressione dei tasti e interazioni con i menu contestuali. Questo è utile per eseguire azioni più complesse come il passaggio del mouse sopra e
trascina e rilascia.
Genera azioni dell'utente. Quando chiami i metodi per le azioni sull'oggetto ActionChains, le azioni vengono memorizzate.
in una coda nell'oggetto ActionChains. Quando chiami perform(), gli eventi vengono attivati nell'ordine in cui sono
in coda.
ActionChains possono essere utilizzati in un modello a catena:
driver.find_element_by_css_selector(".nav")
driver.find_element_by_css_selector(".nav #submenu1")
ActionChains(driver).sposta_su_elemento(menu).clicca(hidden_submenu).esegui()
Le azioni possono essere messe in coda una ad una, per poi essere eseguite.
menu=driver.find_element_by_css_selector(".nav")
driver.find_element_by_css_selector(".nav #submenu1")
ActionChains(driver)
azioni.sposta_a_elemento(menu)
[Link](sottomenu_nascosto)
[Link]()
In entrambi i casi, le azioni vengono eseguite nell'ordine in cui vengono chiamate, una dopo l'altra.
clicca(su_elemento=None)
Clicca su un elemento.
Argomenti
L'elemento da cliccare. Se None, clicca sulla posizione corrente del mouse.
clicca_e_tieni(su_elemento=None)
Tiene premuto il pulsante sinistro del mouse su un elemento.
Argomenti
L'elemento su cui fare clic con il tasto del mouse. Se None, fa clic sulla posizione attuale del mouse.
clic_destro(su_elemento=None)
Esegue un clic contestuale (clic destro) su un elemento.
Argomenti
L'elemento su cui fare click con il tasto destro. Se None, fa clic sulla posizione attuale del mouse.
doppio_clic(su_elemento=None)
Fai doppio clic su un elemento.
Args
L'elemento da fare doppio clic. Se None, fa clic sulla posizione attuale del mouse.
trascina_e_rilascia
Tiene premuto il pulsante sinistro del mouse sull'elemento sorgente, quindi si sposta sull'elemento di destinazione e lo rilascia
il pulsante del mouse.
Args
trascina_e_rilascia_per_offset(sorgente,xoffset,yoffset)
Tiene premuto il pulsante sinistro del mouse sull'elemento sorgente, quindi si sposta sull'offset di destinazione e rilascia.
il pulsante del mouse.
Argomenti
• fonte: L'elemento da premere con il mouse.
tasto_giù(valore, elemento=None)
Invia solo una pressione di tasto, senza rilasciarlo. Dovrebbe essere utilizzato solo con tasti modificatori (Control, Alt e
Trasferimento).
Argomenti
La chiave modificatore da inviare. I valori sono definiti nella classe Keys.
• elemento: L'elemento a cui inviare i tasti. Se None, invia un tasto all'elemento attualmente a fuoco.
ActionChains(driver).key_down([Link]).send_keys('c').key_up(Keys.
˓→ CONTROL).eseguire()
chiave_su
Rilascia un tasto modificatore.
Argomenti
la chiave modificatore da inviare. I valori sono definiti nella classe Keys.
• elemento: L'elemento su cui inviare tasti. Se None, invia un tasto all'elemento attualmente focalizzato.
ActionChains(driver).key_down([Link]).send_keys('c').key_up(Keys.
˓→ CONTROL).eseguire()
muovi_per_offset(xoffset, yoffset)
Spostare il mouse a un offset dalla posizione attuale del mouse.
Argomenti
• xoffset: Offset X da raggiungere, come un intero positivo o negativo.
• yoffset: Offset Y da spostare, come un intero positivo o negativo.
sposta_su_elemento(to_element)
Spostare il mouse al centro di un elemento.
Argomenti
L'elemento Web a cui spostarsi.
sposta_a_elemento_con_offset(elemento, xoffset, yoffset)
Sposta il mouse di un'offset rispetto all'elemento specificato. Gli offset sono relativi all'angolo in alto a sinistra del
elemento.
Argomenti
L'elemento Web su cui spostarsi.
• xoffset: Offset X verso cui spostarsi.
eseguire()
Esegue tutte le azioni memorizzate.
rilascio(su_elemento=None)
Rilasciare un pulsante del mouse tenuto su un elemento.
Argomenti
L'elemento su cui alzare il mouse. Se None, rilascia sulla posizione attuale del mouse.
reset_actions()
Elimina le azioni che sono già memorizzate sul lato remoto.
invia_chiavi(*chiavi_da_inviare)
Invia tasti all'elemento attualmente focalizzato.
Argomenti
Le chiavi da inviare. Le constanti delle chiavi modificatrici possono essere trovate nella classe 'Keys'.
invia_chiavi_a_elemento(elemento,*chiavi_da_inviare)
Invia tasti a un elemento.
Argomenti
• elemento: L'elemento a cui inviare i tasti.
Le chiavi da inviare. Le costanti dei tasti modificatori possono essere trovate nella classe 'Keys'.
Avvisi
L'implementazione dell'Alert.
[Link](driver)
Basi: oggetto
Consente di lavorare con gli avvisi.
Utilizza questa classe per interagire con i prompt di avviso. Contiene metodi per chiudere, accettare, inserire e ottenere
testo dai messaggi di avviso.
Avviso(driver).accetta()
Allerta(driver).annulla()
Vuoi uscire?
accettare()
Accetta l'allerta disponibile.
Utilizzo:: Alert(driver).accept() # Conferma un dialogo di avviso.
autenticare
Invia il nome utente / password a una finestra di dialogo autenticata (come con l'autenticazione HTTP di base). Clicca implicitamente
ok'
Uso:: driver.switch_to.[Link]('cheese', 'secretGouda')
stringa da impostare nella sezione del nome utente della finestra di dialogo
imposta nella sezione password della finestra di dialogo
dismiss()
Disattiva l'avviso disponibile.
invia_chiavi(chiaviDaInviare)
Invia tasti all'Alert.
Argomenti
Il testo da inviare ad Alert.
testo
Ottiene il testo dell'Avviso.
Tasti Speciali
L'implementazione delle Chiavi.
[Link]
Basi:oggetto
Set di codici per tasti speciali.
ADD= u’\ue025’
ALT= u’\ue00a’
[1;4;12m [0m
u’\ue012’
u’\ue014’
u’\ue013’
u’\ue003’
u'\ue003'
u’
u’\ue005’
u’\ue03d’
u’ ’
e028
CANCELLA= u’’
u' e029'
015
u’ ’
ENTER= u’\ue007’
u’
00c
u’e031’
F10= u’\ue03a’
F11= u’\ue03b’
F12= u’\ue03c’
F2= u’\ue032’
F3= u’\ue033’
F4= u’\ue034’
F5= u’\ue035’
F6= u’\ue036’
F7= u’\ue037’
F8= u’\ue038’
u’e039’
u’\ue011’
INSERISCI= u’ ’
SINISTRA= u’ 12’
u’ ’
u’ ’
u’ d’
u’\ue024’
u'\ue000'
u’\ue01a’
u'\ue01b'
NUMPAD2= u'\ue01c'
u'\ue01d'
u’\ue01e’
NUMPAD5
0020
5
ue022
u’\ue023’
00f
u’ 00e’
u'
'
u’\ue006’
[3~
u’ ’
u'e026'
u' '
u’d’
u'\ue027'
TAB= u’ ’
UP= u’ ’
Questi sono gli attributi che possono essere utilizzati per localizzare gli elementi. Vedi ilLocalizzazione degli Elementicapitolo per esempi di utilizzo.
L'implementazione di By.
[Link]
Basi:oggetto
Set di strategie di localizzazione supportate.
Competenze Desiderate
Vedi ilUtilizzando Selenium con WebDriver remotosezione per esempi di utilizzo delle capacità desiderate. Le capacità desiderate
Implementazione delle capacità.
[Link].desired_capabilities.DesiredCapabilities
Basi:oggetto
Set di capacità desiderate predefinite supportate.
Usa questo come punto di partenza per creare un oggetto di capacità desiderate per richiedere webdriver remoti per con-
collegandosi al server selenium o alla griglia selenium.
Esempio di utilizzo:
daseleniumimportwebdriver
[Link]
Nota: Usa sempre '.copy()' sull'oggetto DesiredCapabilities per evitare effetti collaterali che alterano il globale.
istanza di classe.
ANDROID= {‘platform’: ‘ANDROID’, ‘browserName’: ‘android’, ‘version’: ‘’}
CHROME= {‘platform’: ‘ANY’, ‘browserName’: ‘chrome’, ‘version’: ‘’}
EDGE= {‘platform’: ‘WINDOWS’, ‘browserName’: ‘MicrosoftEdge’, ‘version’: ‘’}
FIREFOX= {‘acceptInsecureCerts’: True, ‘browserName’: ‘firefox’, ‘marionette’: True}
HTMLUNIT= {‘platform’: ‘ANY’, ‘browserName’: ‘htmlunit’, ‘version’: ‘’}
HTMLUNITWITHJS= {‘platform’: ‘ANY’, ‘browserName’: ‘htmlunit’, ‘version’: ‘firefox’, ‘javascriptEnabled’: True}
INTERNETEXPLORER= {‘platform’: ‘WINDOWS’, ‘browserName’: ‘internet explorer’, ‘version’: ‘’}
IPAD= {‘platform’: ‘MAC’, ‘browserName’: ‘iPad’, ‘version’: ‘’}
IPHONE= {‘platform’: ‘MAC’, ‘browserName’: ‘iPhone’, ‘version’: ‘’}
OPERA= {‘platform’: ‘ANY’, ‘browserName’: ‘opera’, ‘version’: ‘’}
PHANTOMJS= {‘platform’: ‘ANY’, ‘browserName’: ‘phantomjs’, ‘version’: ‘’, ‘javascriptEnabled’: True}
SAFARI= {‘platform’: ‘MAC’, ‘browserName’: ‘safari’, ‘version’: ‘’}
Servizi pubblici
I metodi Utils.
[Link].find_connectable_ip(host,port=None)
Risolvi un nome host in un indirizzo IP, preferendo gli indirizzi IPv4.
Preferiamo IPv4 in modo da non cambiare comportamento rispetto alle precedenti implementazioni solo IPv4, e perché alcuni
i driver (ad es., FirefoxDriver) non supportano le connessioni IPv6.
Se è fornito il numero di porta opzionale, verranno considerati solo gli IP che ascoltano sulla porta specificata.
Argomenti
• host - Un nome host.
• porta - Numero di porta opzionale.
Restituisce un singolo indirizzo IP, come stringa. Se viene trovato un indirizzo IPv4, ne viene restituito uno. Altrimenti, se
se viene trovata un'addrizzo IPv6, ne viene restituito uno. Se nessuno, viene restituito None.
[Link].porto_libero()
Determina una porta libera utilizzando dei socket.
[Link].is_connectable(port, host='localhost')
Cerca di connettersi al server sulla porta per vedere se è in esecuzione.
Argomenti
• porta - La porta a cui connettersi.
[Link].is_url_connectable(port)
Cerca di connettersi al server HTTP al percorso /status e alla porta specificata per vedere se risponde con successo.
Argomenti
• porta - La porta a cui connettersi.
[Link].join_host_port(host, port)
Unisce un nome host e una porta insieme.
Questa è un'implementazione minimale destinata a gestire i letterali IPv6. Ad esempio, _join_host_port('::1', 80)
== ‘[::1]:80’.
Args
• host - Un nome host.
• porta - Un numero intero della porta.
[Link].keys_to_typing(valore)
Elabora i valori che verranno digitati nell'elemento.
Firefox WebDriver
[Link](firefox_profile=None, fuoco
fox_binary=None, timeout=30,
capabilities=None,proxy=None,
geckodriver
firefox_options=None,
[Link]
Basi:[Link]
contesto(*args,**kwds)
Imposta il contesto in cui i comandi Selenium vengono eseguiti utilizzando una dichiarazione with. Lo stato del contesto
sul server viene salvato prima di entrare nel blocco e ripristinato al momento dell'uscita.
Parametri contesto - Il contesto può essere una delle proprietà della classe CONTEXT_CHROME o
CONTENUTO_CONTEXTO.
Esempio d'uso:
[Link](selenium.CONTEXT_CHROME):
# ambito chrome
...fare cosest...
esci()
Disinstalla il driver e chiudi tutte le finestre associate.
imposta_contesto(contesto)
chrome
contenuto
NATIVE_EVENTS_ALLOWED= True
profilo_firefox
Chrome WebDriver
[Link](executable_path='chromedriver',
port=0, chrome_options=None,
service_args=None, de-
sired_capabilities=None, essere
vice_log_path=None)
Basi:[Link]
Controlla il ChromeDriver e ti consente di guidare il browser.
Dovrai scaricare l'eseguibile di ChromeDriver da[Link]
[Link]
crea_opzioni()
lancia_app(id)
Avvia l'app Chrome specificata dall'id.
esci()
Chiude il browser e arresta l'eseguibile ChromeDriver che viene avviato all'avvio del
ChromeDriver
WebDriver Remoto
L'implementazione di WebDriver.
[Link](command_executor=’[Link]
desired_capabilities=None,
browser_profile=None,
proxy=None, keep_alive=False
file_detector=None)
Basi:oggetto
Controlla un browser inviando comandi a un server remoto. Questo server dovrebbe essere in esecuzione sul Web-
Protocollo wire del driver come definito inNon posso accedere a link esterni o contenuti specifici da URL.
Attributi
ID della sessione del browser avviata e controllata da questo WebDriver.
•capacità - Dizionario delle capacità efficaci di questa sessione del browser come restituito
dal server remoto. Vedi[Link]
Capacità Desiderate
• command_executor - oggetto remote_connection.RemoteConnection utilizzato per eseguire com-
comandi.
• error_handler - oggetto [Link] utilizzato per gestire gli errori.
aggiungi_cookie(cookie_dict)
Aggiunge un cookie alla tua sessione attuale.
Argomenti
un oggetto dizionario, con chiavi richieste - 'name' e 'value'; opzionale
keys - “path”, “domain”, “secure”, “expiry”
indietro()
Fa un passo indietro nella cronologia del browser.
[Link]()
chiudere()
Chiude la finestra corrente.
[Link]()
crea_elemento_web(element_id)
Crea un elemento web con l'element_id specificato.
elimina_tutti_i_cookie()
Elimina tutti i cookie nell'ambito della sessione.
Usagedriver.elimina_tutti_i_cookie()
cancella_cookie(nome)
Elimina un singolo cookie con il nome fornito.
Usagedriver.delete_cookie('my_cookie')
esegui(comando_driver, parametri=None)
Invia un comando da eseguire a un [Link].
Argomenti
Il nome del comando da eseguire come stringa.
• params: Un dizionario di parametri nominati da inviare con il comando.
Restituzioni La risposta JSON del comando caricata in un oggetto dizionario.
esegui_script_async(script, *args)
Esegue JavaScript in modo asincrono nella finestra/cornice attuale.
Argomenti
Il JavaScript da eseguire.
*args: Qualsiasi argomento applicabile per il tuo JavaScript.
Usagedriver.execute_async_script('[Link]')
eseguire_script(script, *args)
Esegue JavaScript in modo sincrono nella finestra/frame corrente.
Argomenti
Il JavaScript da eseguire.
• *args: Qualsiasi argomento applicabile per il tuo JavaScript.
Usagedriver.execute_script('[Link]')
file_detector_context(*args,**kwds)
Sovrascrive il rilevatore di file corrente (se necessario) in un contesto limitato. Assicura che il rilevatore di file originale sia impostato
dopo.
Esempio:
con webdriver.file_detector_context(UselessFileDetector): someinput.send_keys('/etc/hosts')
Argomenti
•file_detector_class - Classe del rilevatore di file desiderato. Se la classe è diversa da
il file_detector attuale, quindi la classe viene istanziata con args e kwargs e utilizzata come
un rilevatore di file durante la durata del gestore di contesto.
•args - Argomenti facoltativi che vengono passati alla classe del rilevatore di file durante
instanziazione.
• kwargs - Argomenti chiave, passati allo stesso modo degli args.
find_element(by=’id’,value=None)
Metodo ‘privato’ utilizzato dai metodi find_element_by_*.
Utilizza il corrispondente find_element_by_* invece di questo.
Tipo di ritornoWebElemento
trova_elemento_per_nome_classe(nome)
Trova un elemento per nome della classe.
Args
• nome: Il nome della classe dell'elemento da trovare.
Usagedriver.trova_elemento_per_nome_classe('foo')
trova_elemento_per_css_selector(css_selector)
Trova un elemento tramite selettore css.
Argomenti
Il selettore css da usare quando si cercano elementi.
Usagedriver.find_element_by_css_selector('#foo')
trova_elemento_per_id(id_)
Trova un elemento per id.
Argomenti
• id_ - L'id dell'elemento da trovare.
Usagedriver.find_element_by_id('foo')
trova_elemento_per_testo_della_link(link_text)
Trova un elemento per testo del link.
Argomenti
Il testo dell'elemento da trovare.
Usagedriver.find_element_by_link_text('Accedi')
trova_elemento_per_nome(nome)
Trova un elemento per nome.
Argomenti
Argomenti
Il testo dell'elemento su cui abbinare parzialmente.
Usagedriver.find_element_by_partial_link_text('Accedi')
trova_elemento_per_nome_tag(nome)
Trova un elemento per nome del tag.
Argomenti
• nome: Il nome dell'etichetta dell'elemento da trovare.
Usagedriver.find_element_by_tag_name('foo')
trova_elemento_per_xpath(xpath)
Trova un elemento tramite xpath.
Argomenti
• xpath - Il localizzatore xpath dell'elemento da trovare.
Usagedriver.find_element_by_xpath(‘//div/td[1]’)
trova_elementi(per=’id’, valore=None)
Metodo 'Privato' utilizzato dai metodi find_elements_by_*.
UtilizzoUtilizza i corrispondenti find_elements_by_* invece di questo.
trova_elementi_per_nome_classe(nome)
Trova elementi per nome di classe.
Argomenti
• nome: Il nome della classe degli elementi da trovare.
Usagedriver.find_elements_by_class_name('foo')
trova_elementi_per_css_selector(css_selector)
Trova elementi tramite selettore css.
Argomenti
Il selettore css da utilizzare per trovare gli elementi.
Usagedriver.find_elements_by_css_selector(‘.foo’)
trova_elementi_per_id(id_)
Trova più elementi per id.
Args
• id_ - L'id degli elementi da trovare.
Usagedriver.find_elements_by_id('foo')
trova_elementi_per_testo_link(testoe)
Trova elementi per testo del link.
Argomenti
Argomenti
Il testo dell'elemento su cui fare una corrispondenza parziale.
Usagedriver.find_element_by_partial_link_text(‘Sign’)
trova_elementi_per_nome_tag(nome)
Trova elementi per nome del tag.
Argomenti
Il nome del tag da utilizzare quando si cercano elementi.
Usagedriver.find_elements_by_tag_name('foo')
trova_elementi_per_xpath(xpath)
Trova più elementi tramite xpath.
Argomenti
• xpath - Il localizzatore xpath degli elementi da trovare.
Usagedriver.trova_elementi_per_xpath("//div[contains(@class, 'foo')]" )
avanti()
Va un passo avanti nella cronologia del browser.
[Link]()
ottieni(url)
Carica una pagina web nella sessione corrente del browser.
get_cookie(nome)
Ottieni un singolo biscotto per nome. Restituisce il biscotto se trovato, None se non trovato.
Usagedriver.get_cookie('my_cookie')
ottieni_cookies()
Restituisce un insieme di dizionari, corrispondenti ai cookie visibili nella sessione corrente.
Usagedriver.get_cookies()
ottieni_log(tipologia_log)
Ottiene il registro per un dato tipo di registro
Argomenti
tipo di registro che verrà restituito
Usagedriver.get_log('browser') driver.get_log('driver') driver.get_log('client')
driver.get_log('server')
48 Capitolo 7
Selenium Python Bindings, Rilascio 2
get_schermata_come_base64()
Ottiene lo screenshot della finestra corrente come stringa codificata in base64 utile per l'incorporamento
immagini in HTML.
Usagedriver.get_screenshot_as_base64()
salva_schermata_in_file(nomefile)
Acquisisce uno screenshot della finestra corrente. Restituisce False se si verifica un IOError, altrimenti restituisce True.
Usa percorsi completi nei nomi dei file.
Args
• nomefile: Il percorso completo in cui desideri salvare il tuo screenshot.
Usagedriver.get_screenshot_as_file('/Screenshots/[Link]')
ottieni_schermata_come_png()
Ottiene lo screenshot della finestra attuale come dati binari.
Usagedriver.get_screenshot_as_png()
ottieni_posizione_finestra(windowHandle='corrente')
Ottiene la posizione x,y della finestra corrente.
Usagedriver.get_window_position()
get_window_rect()
Ottiene le coordinate x, y della finestra così come l'altezza e la larghezza della finestra corrente.
Usagedriver.get_window_rect()
ottieni_dimensione_finestra(finestraHandle='corrente')
Ottiene la larghezza e l'altezza della finestra attuale.
Usagedriver.get_window_size()
implicitamente_attendere(tempo_da_attendere)
Imposta un timeout attivo per attendere implicitamente che un elemento venga trovato o che un comando venga completato.
il metodo deve essere chiamato solo una volta per sessione. Per impostare il timeout per le chiamate a exe-
cute_async_script, vedi set_script_timeout.
Argomenti
Tempo da attendere (in secondi)
Usagedriver.aspetta_implicitamente(30)
massimizza_finestra()
Massimizza la finestra attuale che il webdriver sta utilizzando
esci()
Chiude il driver e tutte le finestre associate.
[Link]()
aggiorna()
Aggiorna la pagina corrente.
[Link]()
salva_istantanea(filename)
Ottiene lo screenshot della finestra attuale. Restituisce False se c'è qualche IOError, altrimenti restituisce True.
Usa percorsi completi nei tuoi nomi di file.
Argomenti
Il percorso completo in cui desideri salvare il tuo screenshot.
Usagedriver.save_screenshot('/Screenshot/[Link]')
imposta_tempo_caricamento_pagina(tempo_da_attendere)
Imposta il tempo da attendere per il completamento del caricamento di una pagina prima di generare un errore.
Argomenti
Il tempo da attendere
Usagedriver.imposta_timeout_caricamento_pagina(30)
imposta_timeout_script(tempo_da_attendere)
Imposta la quantità di tempo che lo script dovrebbe attendere durante una chiamata execute_async_script prima di lanciare.
in un errore.
Argomenti
Il tempo da attendere (in secondi)
Usagedriver.set_script_timeout(30)
imposta_posizione_finestra(x,y,handleFinestra='current')
Imposta la posizione x,y della finestra corrente. ([Link])
Argomenti
• x: la coordinata x in pixel per impostare la posizione della finestra
Usagedriver.set_window_position(0,0)
set_window_rect(x=None,y=None,larghezza=None,altezza=None)
Imposta le coordinate x, y della finestra così come l'altezza e la larghezza della finestra corrente.
Argomenti
• larghezza: la larghezza in pixel da impostare per la finestra
Usagedriver.set_window_size(800,600)
avvia_client()
Chiamato prima di iniziare una nuova sessione. Questo metodo può essere sovrascritto per definire un comportamento di avvio personalizzato.
avvia_sessione(capacità, profilo_browser=None)
Crea una nuova sessione con le capacità desiderate.
Argomenti
ferma_cliente()
Chiamato dopo aver eseguito un comando di uscita. Questo metodo può essere sovrascritto per definire un arresto personalizzato.
comportamento.
cambia_a_elemento_attivo()
Uso deprecato di driver.switch_to.active_element
cambia_a_avviso()
Utilizzo obsoleto driver.switch_to.alert
cambia_a_contenuto_predefinito()
Utilizzo obsoleto driver.switch_to.default_content
cambia_a_frame(riferimento_frame)
Uso deprecato di driver.switch_to.frame
cambia_finestra(nome_finestra)
Uso deprecato di driver.switch_to.window
cache_applicazione
Restituisce un oggetto ApplicationCache per interagire con la cache dell'app del browser
url_corrente
Ottiene l'URL della pagina corrente.
Usagedriver.current_url
handle_finestra_corrente
Restituisce l'handle della finestra corrente.
Usagedriver.current_window_handle
capacità_desiderate
restituisce le attuali capacità desiderate del driver in uso
rilevatore_di_file
tipi_di_log
Ottiene un elenco dei tipi di log disponibili
Usagedriver.tipologie_di_log
mobile
nome
Restituisce il nome del browser sottostante per questa istanza.
Utilizzo
[Link]
orientamento
Ottiene l'orientamento attuale del dispositivo
orientamento dell'uso
sorgente_pagina
Ottiene il sorgente della pagina corrente.
Usagedriver.page_source
cambia_a
titolo
Restituisce il titolo della pagina attuale.
Titolo dell'uso del driver
maniglie_finestra
Restituisce i gestori di tutte le finestre all'interno della sessione corrente.
Usagedriver.finestra_maniglie
ElementoWeb
svuotare()
Cancella il testo se è un elemento di inserimento testo.
clicca()
Clicca sull'elemento.
trova_elemento(per='id', valore=None)
trova_elemento_per_nome_di_classe(name)
Trova l'elemento all'interno dei figli di questo elemento per nome di classe.
Argomenti
nome - nome della classe da cercare.
trova_elemento_per_selettore_css(css_selector)
Trova un elemento tra i figli di questo elemento utilizzando un selettore CSS.
Args
string di selettore CSS, es: '[Link]#home'
trova_elemento_per_id(id_)
Trova elemento all'interno dei figli di questo elemento per ID.
Argomenti
• id_ - ID dell'elemento figlio da individuare.
trova_elemento_per_testo_link(link_text)
Trova elemento tra i figli di questo elemento tramite il testo del link visibile.
Argomenti
Argomenti
Stringa di testo del link da cercare.
trova_elemento_per_nome_tag(nome)
Trova l'elemento tra i figli di questo elemento per nome del tag.
Argomenti
nome - nome del tag html (es: h1, a, span)
trova_elemento_per_xpath(xpath)
Trova l'elemento tramite xpath.
myelement.trova_elementi_per_xpath(".//a")
myelement.trova_elementi_per_xpath("//a")
trova_elementi(per='id', valore=None)
trova_elementi_per_nome_classe(nome)
Trova un elenco di elementi all'interno dei figli di questo elemento per nome di classe.
Argomenti
• nome - nome della classe da cercare.
trova_elementi_per_selettore_css(css_selector)
Trova un elenco di elementi all'interno dei figli di questo elemento tramite selettore CSS.
Argomenti
string di selettore CSS, ad esempio: '[Link]#home'
trova_elementi_per_id(id_)
Trova un elenco di elementi all'interno dei figli di questo elemento per ID.
Argomenti
• id_ - Id dell'elemento figlio da trovare.
trovare_elementi_per_testo_link(link_text)
Trova un elenco di elementi all'interno dei figli di questo elemento per testo di collegamento visibile.
Argomenti
Stringa di testo del link da cercare.
7.11. WebElement 53
Selenium Python Bindings, Rilascio 2
trova_elementi_per_nome(nome)
Trova un elenco di elementi tra i figli di questo elemento per nome.
Args
• nome - proprietà del nome da cercare.
trova_elementi_per_testo_parziale_link(link_text)
Trova un elenco di elementi all'interno dei figli di questo elemento per testo del collegamento.
Argomenti
Stringa di testo del link da cercare.
trova_elementi_per_nome_tag(nome)
Trova un elenco di elementi all'interno dei figli di questo elemento per nome del tag.
Argomenti
nome
trova_elementi_per_xpath(xpath)
Trova elementi all'interno dell'elemento tramite xpath.
Argomenti
• xpath - stringa del localizzatore xpath.
myelement.trova_elementi_per_xpath(".//a")
myelement.trova_elementi_per_xpath("//a")
ottieni_attributo(nome)
Ottiene l'attributo o la proprietà data dell'elemento.
Questo metodo tenterà innanzitutto di restituire il valore di una proprietà con il nome fornito. Se esiste una proprietà con quel nome.
il nome non esiste, restituisce il valore dell'attributo con lo stesso nome. Se non c'è un attributo con quello
nome,None viene restituito.
I valori che sono considerati veri, ossia uguali a "vero" o "falso", vengono restituiti come booleani. Tutti gli altri
I valori non None vengono restituiti come stringhe. Per attributi o proprietà che non esistono, viene restituito None.
Argomenti
Nome dell'attributo/proprietà da recuperare.
Esempio:
ottenere_proprietà(nome)
Ottiene la proprietà data dell'elemento.
Argomenti
Nome della proprietà da recuperare.
Esempio:
è_visualizzato()
Se l'elemento è visibile per un utente.
è_abilitato()
Restituisce se l'elemento è abilitato.
è_selezionato()
Restituisce se l'elemento è selezionato.
Può essere utilizzato per controllare se una casella di controllo o un pulsante di opzione è selezionato.
screenshot(nomefile)
Ottiene lo screenshot dell'elemento corrente. Restituisce False se si verifica un IOError, altrimenti restituisce True.
Usa percorsi completi nel nome del file.
Argomenti
• nomefile: Il percorso completo in cui desideri salvare il tuo screenshot.
[Link]('/Screenshots/[Link]')
invia_tasti(*valore)
Simula la digitazione nell'elemento.
Argomenti
• valore - Una stringa per la digitazione o la impostazione dei campi del modulo. Per impostare gli input di file, questo potrebbe essere un
percorso del file locale.
Usa questo per inviare semplici eventi di chiave o per compilare i campi del modulo:
driver trova_elemento_per_nome('username')
form_textfield.send_keys("admin")
Questo può essere utilizzato anche per impostare gli input dei file.
file_input=driver.find_element_by_name('profilePic')
file_input.send_keys("percorso/verso/[Link]")
In generale è meglio racchiudere il percorso del file in uno dei metodi
# in [Link] per restituire il percorso effettivo per supportare il test tra diverse piattaforme.
# file_input.send_keys([Link]("percorso/verso/[Link]"))
inviare()
Invia un modulo.
valore_della_proprietà_css(nome_proprietà)
Il valore di una proprietà CSS.
id
ID interno utilizzato da selenium.
Questo è principalmente per uso interno. Casi d'uso semplici come controllare se 2 elementi web si riferiscono allo stesso
l'elemento, può essere fatto usando==:
seelemento1==elemento2:
Questi 2 sono uguali
7.11. WebElement 55
Collegamenti Python Selenium, Rilascio 2
posizione
La posizione dell'elemento nel canvas renderizzabile.
posizione_una_volta_scorsa_nella_vista
QUESTA PROPRIETÀ PUÒ CAMBIARE SENZA PREAVVISO. Usa questo per scoprire dove sullo schermo un
l'elemento è così che possiamo fare clic su di esso. Questo metodo dovrebbe far scorrere l'elemento in vista.
Restituisce la posizione nell'angolo in alto a sinistra dello schermo, oppure None se l'elemento non è visibile.
genitore
Riferimento interno all'istanza di WebDriver da cui è stato trovato questo elemento.
rettangolo
Un dizionario con le dimensioni e la posizione dell'elemento.
screenshot_in_base64
Ottiene lo screenshot dell'elemento corrente come stringa codificata in base64.
Usageimg_b64 = elemento.screenshot_as_base64
screenshot_as_png
Ottiene lo screenshot dell'elemento attuale come dati binari.
element.screenshot_as_png
dimensione
La dimensione dell'elemento.
nome_tag
Questa proprietà del tagName dell'elemento.
testo
Il testo dell'elemento.
Supporto UI
[Link](webelement)
Basi:oggetto
deseleziona_tutti()
Cancella tutte le voci selezionate. Questo è valido solo quando il SELECT supporta selezioni multiple. genera
NotImplementedError Se il SELECT non supporta selezioni multiple
deseleziona_per_indice(indice)
Deseleziona l'opzione all'indice dato. Questo viene fatto esaminando l'attributo 'indice' di un elemento, e
non semplicemente contando.
Args
• indice - L'opzione a questo indice sarà deselezionata
lancia NoSuchElementException se non c'è alcuna opzione con l'indice specificato in SELECT
deselezionare_per_valore(valore)
Deseleziona tutte le opzioni che hanno un valore che corrisponde all'argomento. Cioè, quando si dà "foo" questo deselezionerebbe
un'opzione come:
<option value="foo">Bar</option>
Argomenti
• valore - Il valore da confrontare
lancia NoSuchElementException se non c'è alcuna opzione con il valore specificato in SELECT
deseleziona_per_testo_visibile(testo)
Deseleziona tutte le opzioni che visualizzano testo corrispondente all'argomento. Cioè, quando viene fornito "Bar" questo verrebbe deselezionato.
un'opzione come:
<option value=”foo”>Bar</option>
Argomenti
Il testo visibile da abbinare
seleziona_per_indice(indice)
Seleziona l'opzione all'indice fornito. Questo viene fatto esaminando l'attributo "index" di un elemento, e non
semplicemente contando.
Args
• indice - L'opzione a questo indice sarà selezionata
lancia NoSuchElementException Se non c'è un'opzione con l'indice specificato in SELECT
seleziona_per_valore(valore)
Seleziona tutte le opzioni che hanno un valore corrispondente all'argomento. Cioè, quando viene fornito 'foo', questo selezionerebbe un
opzione come:
<option value="foo">Bar</option>
Argomenti
• valore - Il valore da confrontare
lancia NoSuchElementException se non c'è nessuna opzione con valore specificato in SELECT
seleziona_per_testo_visibile(testo)
Seleziona tutte le opzioni che visualizzano testo che corrisponde all'argomento. Cioè, quando viene fornito "Bar" questo selezionerebbe un
opzione come:
<option value="foo">Bar</option>
Argomenti
Il testo visibile da confrontare
lancia NoSuchElementException Se non c'è nessuna opzione con il testo specificato in SELECT
prima_opzione_selezionata
La prima opzione selezionata in questo tag select (o l'opzione attualmente selezionata in un normale select)
opzioni
Restituisce un elenco di tutte le opzioni appartenenti a questo tag select
[Link](driver,timeout,poll_frequency=0.5,
ignored_exceptions=None)
Basi:oggetto
fino(a) (metodo, messaggio='')
Chiama il metodo fornito con il driver come argomento finché il valore di ritorno non è False.
fino_a_non(metodo,messaggio='')
Chiama il metodo fornito con il driver come argomento finché il valore di ritorno è False.
7.12. Supporto UI 57
Selenium Python Bindings, Versione 2
Supporto Colore
[Link](rosso,verde,blu,alpha=1)
Basi:oggetto
Classe di supporto per la conversione dei colori
Esempio:
[Link]
stampa(Color.from_string('#00ff33').rgba)
stampa(Color.from_string('rgb(1, 255, 3)').hex)
stampa(Color.from_string('blu').rgba)
staticfrom_string(str_)
esagono
rgb
rgba
[Link].expected_conditions.alert_is_present
Basi: oggetto
Aspettati che sia presente un avviso.
[Link].expected_conditions.element_located_selection_state_to_be(loc
è_
Basi:oggetto
Un'aspettativa di localizzare un elemento e verificare se lo stato di selezione specificato è in quello stato. Il localizzatore è una tupla di
(da, percorso) is_selected è un booleano
[Link].expected_conditions.elemento_locato_per_essere_selezionato(locator)
Basi:oggetto
Viene selezionata un'aspettativa affinché l'elemento venga localizzato. Il localizzatore è una tupla di (by, path)
[Link].expected_conditions.element_selection_state_to_be(element,
è_selezionato)
Basi:oggetto
Un'aspettativa per verificare se l'elemento dato è selezionato. L'elemento è un oggetto WebElement, è_selezionato è un
Booleana.
[Link].expected_conditions.element_to_be_clickable(locator)
Basi:oggetto
Un'aspettativa per controllare se un elemento è visibile e abilitato in modo da poterlo cliccare.
[Link].expected_conditions.element_to_be_selected(element)
Basi:oggetto
Un'aspettativa per verificare che la selezione sia selezionata. L'elemento è un oggetto WebElement
[Link].expected_conditions.frame_per_essere_disponibile_e_passare_a_esso(lo
Basi:oggetto
Un'aspettativa per verificare se il frame dato è disponibile per essere switchato. Se il frame è disponibile, passa.
il driver fornito al telaio specificato.
classe [Link].expected_conditions.invisibilità_dell'elemento_collegato(locator)
Basi:oggetto
Un'aspettativa per verificare che un elemento sia invisibile o non presente nel DOM.
localizzatore utilizzato per trovare l'elemento
[Link].expected_conditions.new_window_is_opened(current_handles)
Basi:oggetto
Una aspettativa che una nuova finestra venga aperta e che aumenti il numero di maniglie delle finestre
[Link].expected_conditions.numero_di_finestrature_da_essere(num_windows)
Basi: oggetto
Un'aspettativa che il numero di finestre sia un certo valore.
[Link].expected_conditions.presenza_di_tutti_gli_elementi_locati(locator)
Basi:oggetto
Un'aspettativa per verificare che ci sia almeno un elemento presente su una pagina web. Il localizzatore viene utilizzato per trovare il
l'elemento restituisce l'elenco degli WebElement una volta che sono stati individuati
[Link].expected_conditions.presenza_di_elemento_locato(locator)
Basi:oggetto
Un'aspettativa per verificare che un elemento sia presente nel DOM di una pagina. Questo non significa necessariamente
che l'elemento è visibile. localizzatore - utilizzato per trovare l'elemento restituisce il WebElement una volta che è stato localizzato
[Link].expected_conditions.staleness_of(element)
Basi:oggetto
Aspetta fino a quando un elemento non è più attaccato al DOM. l'elemento è quello da cui aspettare. restituisce Falso se il
l'elemento è ancora attaccato al DOM, altrimenti falso.
[Link].expected_conditions.text_to_be_present_in_element(locator,
Basi:oggetto
Un'aspettativa per controllare se il testo fornito è presente nell'elemento specificato. localizzatore, testo
[Link].expected_conditions.testo_da_essere_presente_nel_valore_dell'elemento(locato
Basi:oggetto
Un'aspettativa per verificare se il testo fornito è presente nel localizzatore dell'elemento, testo
[Link].expected_conditions.title_contains(titolo)
Basi:oggetto
Un'aspettativa per verificare che il titolo contenga un sottostringa sensibile al maiuscolo. title è il frammento di titolo previsto
restituisce True quando il titolo corrisponde, False altrimenti
[Link].expected_conditions.title_is(titolo)
Basi:oggetto
Un'aspettativa per controllare il titolo di una pagina. Il titolo è il titolo atteso, che deve essere una corrispondenza esatta.
Vero se il titolo corrisponde, falso altrimenti.
[Link].expected_conditions.visibilità_di(element)
Basi:oggetto
Un'aspettativa per verificare che un elemento, noto per essere presente nel DOM di una pagina, sia visibile. Visibilità
significa che l'elemento non è solo visualizzato ma ha anche un'altezza e una larghezza superiori a 0. l'elemento è il
WebElement restituisce il (medesimo) WebElement una volta che è visibile
class [Link].expected_conditions.visibility_of_all_elements_located(locator
Basi:oggetto
Un'aspettativa per verificare che tutti gli elementi siano presenti nel DOM di una pagina e visibili. La visibilità significa
che gli elementi non siano solo visualizzati ma abbiano anche un'altezza e una larghezza superiori a 0. localizzatore - utilizzato per
trovare gli elementi restituisce l'elenco di WebElement una volta che sono stati localizzati e sono visibili
[Link].expected_conditions.visibility_of_any_elements_located(localizzatore
Basi:oggetto
Un'aspettativa per verificare che ci sia almeno un elemento visibile su una pagina web. Il locatore viene utilizzato per trovare il
l'elemento restituisce l'elenco dei WebElement una volta che sono stati localizzati
[Link].expected_conditions.visibilità_di_elemento_locato(locatore)
Basi:oggetto
Un'aspettativa per verificare che un elemento sia presente nel DOM di una pagina e visibile. La visibilità significa che
l'elemento non è solo visualizzato ma ha anche un'altezza e una larghezza maggiori di 0. localizzatore - utilizzato per trovare il
l'elemento restituisce il WebElement una volta che è stato localizzato e è visibile
Un'altra FAQ:[Link]
estrai chromedriver_linux32_x.[Link]
Dovresti vedere achromedriverexecutable. Ora puoi creare un'istanza di Chrome WebDriver in questo modo:
driver=[Link](percorso_eseguibile="/path/to/chromedriver")
Rif:[Link]
Selenium delega le query XPath al motore XPath del browser, quindi il supporto di Selenium per XPath è supportato.
Qualsiasi cosa supporti il browser. Nei browser che non hanno motori XPath nativi (IE 6,7,8), Selenium supporta
Solo XPath 1.0.
Rif:[Link]
Puoi utilizzare il metodo execute_script per eseguire javascript sulla pagina caricata. Quindi, puoi chiamare l'API JavaScript
scorrere fino in fondo o in qualsiasi altra posizione di una pagina.
61
Selenium Python Bindings, Rilascio 2
driver.execute_script("[Link](0, [Link]);")
Ilfinestral'oggetto nel DOM ha unascorrereVersometodo per scorrere a qualsiasi posizione di una finestra aperta. IlscrollHeight
è una proprietà comune per tutti gli elementi. L'altezza di [Link] darà l'altezza dell'intero corpo del
pagina.
Rif:[Link]
Rif:[Link]
Il primo passo è identificare il tipo di file che desideri salvare automaticamente.
Per identificare il tipo di contenuto che desideri scaricare automaticamente, puoi utilizzarecurl:
curl-I URL|grep"Tipo-Conteúdo"
Un altro modo per trovare il tipo di contenuto è utilizzare ilrichiestemodulo, puoi usarlo in questo modo:
importa richieste
content_type=[Link]('[Link]
stampa(tipo_contenuto)
Una volta che il tipo di contenuto è stato identificato, puoi utilizzarlo per impostare la preferenza del profilo di firefox:[Link].
[Link]
Ecco un esempio:
importos
dalleseleniumimportawebdriver
fp=[Link]()
fp.set_preference("[Link]",2)
fp.set_preference("[Link]",Falso)
fp.set_preference("[Link]", [Link]())
fp.set_preference("[Link]","application/octet-stream"
˓→ ")
browser=[Link](firefox_profile=fp)
[Link]("[Link]
browser.find_element_by_partial_link_text("selenium-2").click()
Seleziona l'elemento <input type="file"> e chiama il metodo send_keys() passando il percorso del file, sia il
percorso relativo allo script di test, o un percorso assoluto. Tieni presente le differenze nei nomi dei percorsi tra Windows e
sistemi Unix.
da selenium importawebdriver
fp=[Link]()
fp.aggiungi_estensione(estensione='[Link]')
fp.set_preference("[Link]","1.8.4")#Evita la schermata di avvio
browser=[Link](firefox_profile=fp)
da selenium importwebdriver
driver=[Link]()
[Link]('[Link]
driver.save_screenshot('[Link]')
[Link]()
Indici e tabelle
• indice generale
• indice di moduli
cerca
65
Selenium Python Bindings, Rilascio 2
s
eccezioni comuni di selenium.32
[Link],44
[Link].action_chains
35
[Link].alert38
[Link].by41
[Link].desired_capabilities
41
[Link].keys39
[Link].utils42
[Link],
43
[Link],44
[Link]
52
[Link].colore58
[Link].expected_conditions,
58
[Link].select56
[Link].wait57
67
Selenium Python Bindings, Versione 2
A metodo)45
accettare() ([Link] BACK_SPACE ([Link]
metodo)39 attributo)39
ActionChains (classe in BACKSPACE ([Link]
seleziona-
[Link].action_chains) attributo)39
35 By (classe in [Link])41
AGGIUNGI ([Link] attributo)
39
C
add_cookie() ([Link] ([Link] at-
metodo)44 tributo),39
Avviso (classe in [Link])38 CHROME ([Link].desired_capabilities.DesiredCapacità
alert_is_present (classe in sele- attributo)42
[Link].expected_conditions NOME_CLASSE ([Link] a-
58 tributo),41
tutte le opzioni selezionate CANCELLA ([Link] at-
(seleziona-
atributo di [Link] tributo)39
57 clear() ([Link]
ALT([Link] attributo) metodo)52
39 click() ([Link].action_chains.ActionChains
ANDROID ([Link].desiderate_capacità.DesiderateCapacitàmetodo),36
attributo)42 click() ([Link]
cache dell'applicazione (seleziona- metodo)cinquantadue
[Link] clicca_e_tieni() (seleziona-
attributo)51 [Link].action_chains.ActionChains
FRECCIA_IN_BASSO (seleziona metodo)36
[Link] attributo) chiudi() ([Link]
39 metodo)45
FRECCIA_SINISTRA ([Link] Colore (classe in [Link])58
attributo)39 COMANDO ([Link]
FRECCIA_DESTRA (sele- attributo)39
[Link] attributo) context() ([Link]
39 metodo)43
FRECCIA_SU ([Link]) CONTESTO_CHROME (selez-
attributo)39 [Link]
autenticare() ([Link] attribuito)44
metodo)39 context_click() ([Link].action_chains.ActionChains
metodo),36
B CONTENUTO_CONTEXTE (seleziona
back() ([Link] [Link]
attributo)44
69
Selenium Python Bindings, Release 2
70 Indice
Binding Python di Selenium, Rilascio 2
metodo),46metodo)53
find_element() ([Link]fiEnlde_meleenmtents_by_class_name() (sele-
metodo)52 [Link]
trova_elemento_per_nome_classe() (seleziona- metodo)47
[Link] trova_elementi_per_nome_classe() (seleziona-
metodo),46 [Link]
trova_elemento_per_nome_classe() (selezionare metodo)53
[Link] trova_elementi_per_selettore_css() (seleziona-
metodo)52 [Link]
trova_elemento_per_css_selector() (seleziona- metodo)47
[Link] find_elements_by_css_selector() (seleziona-
metodo)46 [Link]
trova_elemento_per_selector_css() (seleziona- metodo)53
[Link] trova_elementi_per_id() (seleziona-
metodo)52 [Link]
find_element_by_id() (seleziona- metodo),47
[Link] trova_elementi_per_id() (seleziona-
metodo)46 [Link]
trova_elemento_per_id() (selezionare metodo)53
[Link] trova_elementi_per_testo_collegamento() (seleziona-
metodo),52 [Link]
trova_elemento_per_testo_link() (seleziona- metodo)47
[Link] trova_elementi_per_testo_di_collegamento() (seleziona-
metodo)46 [Link]
trova_elemento_per_testo_link() (seleziona- metodo)53
[Link] trova_elementi_per_nome() (selezionare
metodo)52 [Link]
trova_elemento_per_nome() (seleziona- metodo)48
[Link] trova_elementi_per_nome() (sele-
metodo),46 [Link]
trova_elemento_per_nome() (seleziona- metodo)53
[Link] trova_elementi_per_testo_link_parziale() (seleziona-
metodo)53 [Link]
trova_elemento_per_testo_parziale_del_link() (seleziona- metodo)48
[Link] trova_elementi_per_testo_parziale_del_link() (seleziona
metodo)47 [Link]
trova_elemento_per_testo_parziale_del_link() (seleziona- metodo)54
[Link] trova_elementi_per_nome_tag() (selezionare)
metodo)53 [Link]
trova_elemento_per_nome_tag() (selezionare metodo)48
[Link] trova_elementi_per_nome_tag() (seleziona-
metodo)47 [Link]
trova_elemento_per_nome_tag() (seleziona- metodo)54
[Link] trova_elementi_per_xpath() (seleziona
Indice 71
Legami di Selenium Python, Versione 2
[Link] H
metodo)48 AIUTO ([Link] a-
trova_elementi_per_xpath() (seleziona- tributo)40
[Link] esadecimale ([Link] attributo)
metodo)54 58
FIREFOX ([Link].desired_capabilities.DesiredCapabilities
HOME ([Link] a-
attributo)42 tributo)40
profilo_firefox ([Link] ([Link].desired_capabilities.DesiredCap
attributo),44 attributo)42
prima_opzione_selezionata (seleziona-
HTMLUNITCONJS (sele-
[Link] attributo) [Link].desired_capabilities.CapacitàDesiderate
57 attributo)42
avanti() ([Link]
metodo)48 Io
frame_da_disporre_e_passare_ad_esso (classe in sele-
ID (attributo [Link])41
[Link].expected_conditions)
id ([Link]
58
attributo)55
porta_libera() (in modulo sele- ImeActivationFailedException33
[Link])43
ImeNotAvailableException33
from_string() ([Link]
implicitly_wait() ([Link]
metodo statico)58
metodo),49
G
get() ([Link]
metodo)48
metodo),54
metodo)48
metodo)48
get_log() ([Link]
metodo)48
metodo)54
get_screenshot_as_base64() (scegli-
[Link]
metodo)48
ottieni_istantanea_come_file() (seleziona
[Link]
metodo)49
ottieni_schermata_in_png() (seleziona-
[Link]
metodo)49
get_window_position() (seleziona-
[Link]
metodo)49
get_window_rect() (sele-
[Link]
metodo)49
ottieni_dimensione_finestra() (seleziona-
[Link]
metodo)49
72 Indice
Selenium Python Bindings, Rilascio 2
K nome ([Link]
key_down() ([Link].action_chains.ActionChains attributo)51
metodo)37 EVENTI_nativi_PERMESSI (selez.
key_up() ([Link].action_chains.ActionChains [Link]
metodo),37 attribuito)44
Tasti (classe in [Link])39 una nuova finestra è stata aperta(classe dentro seleziona
keys_to_typing() (nel modulo sele- [Link] condizioni attese)
[Link])43 59
NoAlertPresentException,34
L NoSuchAttributeException34
lancia_app() ([Link].WebDriverNoSuchElementException34
metodo)44 NoSuchFrameException34
SINISTRO ([Link] attributo) NoSuchWindowException34
40 NULL ([Link] a-
LEFT_ALT([Link] a- tributo)40
tributo)40 numero_di_finestra_da_essere (classe in sele-
CONTROLLO_SINISTRO (seleziona- [Link].expected_conditions)
[Link] attributo) 59
40 NUMPAD0 ([Link] a-
LEFT_SHIFT ([Link] tributo),40
attributo)40 NUMPAD1 ([Link] a-
TESTO_LINK ([Link] tributo)40
attribuito)41 NUMPAD2 ([Link] a-
posizione ([Link] tributo),40
attribuito)55 NUMPAD3 ([Link] a-
posizione_una_volta_scorrendo_nella_vista (selezionare tributo)40
[Link] NUMPAD4 ([Link] at-
attributo)56 tributo)40
tipi_di_log ([Link] NUMPAD5 ([Link] at-
attributo)51 tributo)40
NUMPAD6 ([Link] a-
M tributo)40
massimizza_finestra() (selez NUMPAD7 ([Link] at-
[Link] tributo)40
metodo)49 NUMPAD8 ([Link] a-
META([Link] at- tributo)40
tributo)40 NUMPAD9 ([Link] a-
mobile ([Link] tributo)41
attribuito)51
muovi_per_offset() O
(seleziona
OPERA ([Link].desired_capabilities.DesiredCapabili
[Link].action_chains.ActionChains
metodo)37 attributo)42
sposta_a_elemento() (selez- opzioni
) ([Link] a-
[Link].action_chains.ActionChains tributo),57
metodo)37 orientamento ([Link]
sposta_a_elemento_con_offset() (seleziona- attributo)51
[Link].action_chains.ActionChains
metodo)37 P
Eccezione MoveTargetOutOfBounds33 PAGE_DOWN ([Link]
MULTIPLICA([Link] at- attribuito)41
tributo)40 page_source ([Link]
attribuito)51
N PAGE_UP ([Link] a-
NOME (attributo [Link])41 tributo41
Indice 73
Collegamenti Python di Selenium, Rilascio 2
74 Indice
Selenium Python Bindings, Rilascio 2
Indice 75
Selenium Python Bindings, Rilascio 2
WebDriverException,35
WebDriverWait (classe in seleziona
[Link])57
WebElement (classe in seleziona
[Link])52
maniglie_finestra ([Link]
attributo)52
X
XPATH (attributo [Link])
41
76 Indice