tutorial test instalar first examples example como java selenium webdriver selenium-webdriver functional-testing

java - test - Ubicación del elemento de selenio



selenium tutorial java (1)

¿Hay una manera fácil de encontrar un elemento secundario de otro elemento (ambos elementos se han localizado utilizando una PageFactory)? Tenemos un conjunto de contenedores que contienen muchos módulos, y me gustaría asegurarme de que se muestren en sus ubicaciones correctas.

La API solo parece tener el siguiente método:

webElement.findElement(s).(By by);

¿Hay una manera fácil de hacer lo siguiente?

webElement.findElement(s)(WebElement webElement);

o mejor:

webElement.contains(WebElement webElement);


Finalmente obtuve lo que necesitas. Mi mejor solución sería algo en el camino de:

public static void assertContains(WebElement outerElem, WebElement innerElem) { // get borders of outer element Point outerLoc = outerElem.getLocation(); Dimension outerDim = outerElem.getSize(); int outerLeftX = outerLoc.getX(); int outerRightX = outerLeftX + outerDim.getWidth(); int outerTopY = outerLoc.getY(); int outerBottomY = outerTopY + outerDim.getHeight(); // get borders of inner element Point innerLoc = innerElem.getLocation(); Dimension innerDim = innerElem.getSize(); int innerLeftX = innerLoc.getX(); int innerRightX = innerLeftX + innerDim.getWidth(); int innerTopY = innerLoc.getY(); int innerBottomY = innerTopY + innerDim.getHeight(); // assures the inner borders don''t cross the outer borders final String errorMsg = "ughh, some error message"; final boolean contains = (outerLeftX <= innerLeftX) && (innerRightX <= outerRightX) && (outerTopY <= innerTopY) && (innerBottomY <= outerBottomY); assertTrue(errorMsg, contains); }

... funciona solo si ninguno de esos contenedores se superpone. Si lo hacen, probaré alguna magia oscura y salvaje con innerElem.getTag() y getText() y getText() si el texto externo contiene el elemento interno. Una forma de hacerlo:

public static void assertContains(WebElement outer, WebElement inner) { // e.g. //div[text()=''some text in inner element''] final String findInner = ".//" + inner.getTagName() + "[text()=''" + inner.getText() + "'']"; try { outerElem.findElement(By.xpath(findInner)); } catch (NoSuchElementException ignored) { fail("Some horrible message! We are all doomed!"); } // passed }

...o algo similar. Es posible que normalize-space () o contains () (o ambos) sean necesarios debido a etiquetas en etiquetas en etiquetas en ...

Y, por supuesto, esto todavía está adivinando. El primer método puede tener falsos positivos y negativos (pero me gusta más según mis necesidades), el segundo solo debe tener falsos positivos. Puede combinarlos o inventar algo usted mismo (por ejemplo, utilizando Reflection como ya ha indicado).

O archivar un error .