Obtenir la position absolue d'un élément avec le Sélénium web-pilote
Je suis l'aide d'une Sélénium web-serveur en Java, dans le but d'automatiser de nombreuses pages web.
Par exemple:
WebDriver driver = new FirefoxDriver();
driver.get(url);
WebElement element = driver.findElement(By.id("some_id"));
Comment puis-je obtenir la position absolue de element
?
En Javascript, je peux obtenir les offsetTop
et offsetLeft
valeurs de n'importe quel élément dans le DOM:
var element = document.getElementById("some_id");
var offsetTop = element.offsetTop;
var offsetLeft = element.offsetLeft;
Donc, la première chose qui vient à l'esprit est d'appeler le script ci-dessus avec un JavascriptExecutor
.
Mais je voudrais éviter cela. Est-il un autre moyen d'obtenir ces valeurs avec le Sélénium?
Grâce
Vous devez vous connecter pour publier un commentaire.
En Python ce serait d'obtenir le décalage en haut d'un site web de l'élément:
Puisque l'utilisation de Sélénium puis en Java, l'équivalent serait (non testé):
Avez-vous essayé d'utiliser le
getLocation()
méthode deWebElement
? Semble faire ce dont vous avez besoin...Voici la doc API pour que:
http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html
Toutefois, selon la façon dont votre site est construit, un des éléments de la position dépend de la taille de la fenêtre (à vérifier pour
style="position:fixed"
), donc soyez prudent lorsque vous essayez de valider la position de...getLocation()
, mais a rencontré exactement le problème que vous décrivez! Il donne la position relative de l'élément; j'ai besoin de la position absolue.getSize()
etgetPosition()
? Peut-être que certaines de calcul avec ces valeurs peuvent vous donner ce dont vous avez besoin...iframe
, par la voie).div
ou uniframe
ou de tout autre élément, en vertu de laquelle ils sont situés).<input type=hidden>
et puis la lecture avec le Sélénium? C'est un sale solution de contournement, mais il devrait fonctionner...JavascriptExecutor
, puis comme je l'ai mentionné dans la question - je suis en train d'essayer d'éviter cela (parce que, comme vous l'avez dit, c'est un sale solution de contournement).