java - tutorial - Cómo verificar si un elemento es visible con WebDriver
tiempos de espera selenium (11)
Aquí es cómo lo haría (por favor, ignore las llamadas de la clase Logger de preocupación):
public boolean isElementExist(By by) {
int count = driver.findElements(by).size();
if (count>=1) {
Logger.LogMessage("isElementExist: " + by + " | Count: " + count, Priority.Medium);
return true;
}
else {
Logger.LogMessage("isElementExist: " + by + " | Could not find element", Priority.High);
return false;
}
}
public boolean isElementNotExist(By by) {
int count = driver.findElements(by).size();
if (count==0) {
Logger.LogMessage("ElementDoesNotExist: " + by, Priority.Medium);
return true;
}
else {
Logger.LogMessage("ElementDoesExist: " + by, Priority.High);
return false;
}
}
public boolean isElementVisible(By by) {
try {
if (driver.findElement(by).isDisplayed()) {
Logger.LogMessage("Element is Displayed: " + by, Priority.Medium);
return true;
}
}
catch(Exception e) {
Logger.LogMessage("Element is Not Displayed: " + by, Priority.High);
return false;
}
return false;
}
Con WebDriver
de Selenium 2.0a2, tengo problemas para verificar si un elemento es visible.
WebDriver.findElement
devuelve un WebElement
, que desafortunadamente no ofrece un método isVisible
. Puedo evitar esto usando WebElement.clear
o WebElement.click
ambos arrojan una ElementNotVisibleException
, pero esto se siente muy sucio.
Alguna mejor idea?
Aunque estoy un poco tarde respondiendo la pregunta:
Ahora puede usar WebElement.isDisplayed()
para verificar si un elemento está visible.
Es importante ver si el elemento es visible o no, ya que Driver.FindElement
solo verificará la fuente HTML. Pero el código emergente podría estar en la página html y no estar visible. Por lo tanto, la función Driver.FindElement
devuelve un falso positivo (y su prueba fallará)
Si está usando C #, sería driver.Displayed. Aquí hay un ejemplo de mi propio proyecto:
if (!driver.FindElement(By.Name("newtagfield")).Displayed) //if the tag options is not displayed
driver.FindElement(By.Id("expand-folder-tags")).Click(); //make sure the folder and tags options are visible
Tengo las siguientes 2 formas sugeridas:
Puede utilizar
isDisplayed()
como se muestra a continuación:driver.findElement(By.id("idOfElement")).isDisplayed();
Puede definir un método como se muestra a continuación y llamarlo:
public boolean isElementPresent(By by) { try { driver.findElement(by); return true; } catch (org.openqa.selenium.NoSuchElementException e) { return false; } }
Ahora, puede hacer una afirmación como la siguiente para verificar si el elemento está presente o no:
assertTrue(isElementPresent(By.id("idOfElement")));
Verificando ele es visible.
public static boolean isElementVisible(final By by)
throws InterruptedException {
boolean value = false;
if (driver.findElements(by).size() > 0) {
value = true;
}
return value;
}
prueba esto
public boolean isPrebuiltTestButtonVisible() {
try {
if (preBuiltTestButton.isEnabled()) {
return true;
} else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
element instanceof RenderedWebElement
debería funcionar. // Pero esto es para la versión anterior de selenio rc.
Tenga en cuenta:
RenderedWebElement
quedó en deprecated cuatro años (en 2013). Se admitió hasta selenium-2.0-rc-2 y se eliminó de selenium-2.0-rc-3 en adelante.
Por lo tanto, no existe dicha clase RenderedWebElement
en la versión más reciente. La versión actual es 2.46.0. Pruebe usar la última versión
Utilice WebElement
En su lugar, no es necesario isDisplayed() isEnabled() and driver.findElements(By.xpath(accessor)).size() > 0
y todo con isDisplayed() isEnabled() and driver.findElements(By.xpath(accessor)).size() > 0
Algo como esto:
public static boolean isElementFoundDisplayedEnabled(WebDriver driver, String accessor){
return driver.findElements(By.xpath(accessor)).size() > 0 && driver.findElement(By.xpath(accessor)).isDisplayed() && driver.findElement(By.xpath(accessor)).isEnabled();
//isDisplayed(): method avoids the problem of having to parse an element''s "style" attribute to check hidden/visible. False when element is not present
//isEnabled(): generally return true for everything but disabled input elements.
}
element instanceof RenderedWebElement
debería funcionar.
try{
if( driver.findElement(By.xpath("//div***")).isDisplayed()){
System.out.println("Element is Visible");
}
}
catch(NoSuchElementException e){
else{
System.out.println("Element is InVisible");
}
}
public boolean isElementFound( String text) {
try{
WebElement webElement = appiumDriver.findElement(By.xpath(text));
System.out.println("isElementFound : true :"+text + "true");
}catch(NoSuchElementException e){
System.out.println("isElementFound : false :"+text);
return false;
}
return true;
}
text is the xpath which you would be passing when calling the function.
the return value will be true if the element is present else false if element is not pressent