Ottenere la posizione assoluta di un elemento con Selenio web-driver

Sto usando una Selenio web-server in Java, al fine di automatizzare molte pagine web.

Per esempio:

WebDriver driver = new FirefoxDriver();
driver.get(url);
WebElement element = driver.findElement(By.id("some_id"));

Come posso ottenere la posizione assoluta di element?

In Javascript, posso ottenere il offsetTop e offsetLeft valori di ogni elemento nel DOM:

var element    = document.getElementById("some_id");
var offsetTop  = element.offsetTop;
var offsetLeft = element.offsetLeft;

Quindi la prima cosa che viene in mente è quello di chiamare lo script di cui sopra con un JavascriptExecutor.

Ma vorrei evitare questo. C’è qualche altro modo per ottenere questi valori con Selenio?

Grazie

OriginaleL’autore barak manos | 2014-01-30

2 risposte

  1. 2

    In Python questo potrebbe ottenere l’offset superiore di un elemento web:

    driver = webdriver.Chrome()
    driver.get(url)
    element = driver.find_element_by_id('some_id')
    offset_top = element.get_attribute('offsetTop')

    In quanto entrambi utilizzano Selenio quindi in Java l’equivalente sarebbe (non testato):

    WebDriver driver = new FirefoxDriver();
    driver.get(url);
    WebElement element = driver.findElement(By.id("some_id"));
    int offsetTop = element.getAttribute("offsetTop");
    Bella risposta, @ficoath. Riferimento a API

    OriginaleL’autore ficoath

  2. 1

    Avete provato a usare il getLocation() metodo di WebElement? Sembra fare ciò che è necessario…

    Ecco l’API doc:

    http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html

    Tuttavia, a seconda di come il vostro sito è costruito, un elemento di posizione potrebbe dipendere dalla dimensione della finestra (per style="position:fixed"), quindi state attenti quando si tenta di convalidare in posizione…

    Sì! Ho provato getLocation(), ma è stato rilevato il problema esatto che si sta descrivendo! Si dà la posizione relativa dell’elemento; ho bisogno di una posizione assoluta.
    Beh, non so se stiamo parlando della stessa cosa. Da una relativa, vuoi dire che ti dà un risultato diverso come elemento.offsetTop e elemento.offsetLeft? Se il problema è che la posizione dell’elemento dipende dalle dimensioni della Finestra del browser, relative alla progettazione di…
    Hai provato comparint con WebDriver.Finestra e utilizzare il getSize() e getPosition()? Forse alcuni di calcolo con questi valori possono darti ciò di cui hai bisogno…
    Ho bisogno che la posizione dell’elemento di assoluto all’interno della Finestra di browser. Naturalmente potrebbe essere relativo alla posizione del browser sul mio schermo, ma non è la mia principale preoccupazione. Dato un elemento che viene visualizzato nel browser, ho bisogno di ottenere la posizione assoluta all’interno della finestra del browser (anche se questo è un elemento all’interno di un iframe, by the way).
    Non credo che sarà di aiuto. Ho (0,0) per alcuni elementi, che io sappia non sono posizionati in alto a sinistra di tutto (tranne, forse, un div o un iframe o qualsiasi altro elemento in cui si trovano).

    OriginaleL’autore Martin

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *