2012-12-06 15 views
8

Vorrei verificare se l'utente può visualizzare un elemento nella visualizzazione corrente del browser Web senza scorrere.Verifica se un elemento è realmente visibile all'utente

Quello che ho trovato può controllare se l'elemento si trova da qualche parte sulla pagina.

altro suggerimento suggerito controlla la posizione di elementi ma poi avrebbe bisogno di ottenere le dimensioni della finestra visibile del browser più la sua x/y spostate a 0/0.

Sarei grato se qualcuno potesse indicarmi una soluzione che non ha bisogno del codice JavaScript.

+2

Sfortunatamente, nessun modo senza JavaScript. Perché non lo vuoi, comunque? Qualche cosa da [qui] (http://stackoverflow.com/questions/704758/how-to-check-if-an-element-is-really-visible-with-javascript) aiuta? –

+0

@Slanec Ad esempio, ho un bug in cui a causa di alcuni CSS poveri, un pulsante che deve essere cliccato è posizionato, ad esempio al 110% della larghezza della finestra, e l'overflow è impostato su nascosto. Quindi il pulsante non diventerà MAIUSC, non con lo scorrimento o il ridimensionamento o altro. A proposito, questo succede solo a IE11. Quindi ora voglio un test case per verificare che il pulsante sia visibile da aggiungere alla regressione per il prodotto. Sfortunatamente, isDisplayed() è true per l'elemento. – dmansfield

+0

Sto verificando la visibilità di un elemento utilizzando Css, Z-index. Se posso controllare la visibilità dell'elemento, nello strato posteriore di un altro elemento. – bcrajkumar

risposta

2

Come si definisce "visibile all'utente"? Come proponi di controllarlo? Se ha un'altezza? Se non è nascosto dai CSS? Cosa succede se l'elemento genitore è nascosto dai CSS?

Il modo più affidabile sarà quello di utilizzare di selenio costruito nel .Displayed proprietà (se si utilizza C#, Java ha qualcosa di simile), e combinarlo con il selettore 'visibile' di jQuery: http://api.jquery.com/visible-selector/. Esempio di seguito, in C#.

var element = Driver.FindElement(By.Id("test")); 
bool isVisible = element.Displayed; 
var javascriptCapableDriver = (IJavascriptExecutor)Driver; 
bool jQueryBelivesElementIsVisible = javascriptCapableDriver.ExecuteScript("return $('#myElement').is(:visible);"); 
bool elementIsVisible = isVisible && jQueryBelievesElementIsVisible; 

Questo otterrà la maggior parte dei casi.

Non è possibile senza codice lato client, o nella preparazione che qualcun altro trovi un modo per farlo in un linguaggio lato server, dubito fortemente che sia carino, leggibile o affidabile.

jQuery ha il metodo offset():

http://api.jquery.com/offset/

Questo, tuttavia, non funziona se si tiene conto delle frontiere, margini, questo genere di cose.

+1

Definire ** visibile ** come l'elemento è in vista e non nascosto da altri elementi di fronte. – Cani

+0

@Cani Questo dovrebbe essere veramente fattibile, il metodo 'click()' solleva un'eccezione proprio in quelle circostanze (con il messaggio "Elemento <> non è cliccabile al punto (546, 18) .Altro elemento riceverebbe il clic: <> "). Non riesco a capire come farlo senza effettivamente attivare un clic se è visibile ... – Izkata

Problemi correlati