Лучший способ проверить, что элемент отсутствует с помощью Selenium WebDriver с java
Я пытаюсь использовать код ниже, но кажется, что он не работает... Может ли кто-нибудь показать мне лучший способ сделать это?
public void verifyThatCommentDeleted(final String text) throws Exception {
new WebDriverWait(driver, 5).until(new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver input) {
try {
input.findElement(By.xpath(String.format(
Locators.CHECK_TEXT_IN_FIRST_STATUS_BOX, text)));
return false;
} catch (NoSuchElementException e) {
return true;
}
}
});
}
Ответы
Ответ 1
i обычно пара методов (в паре) для проверки наличия или отсутствия элемента:
public boolean isElementPresent(By locatorKey) {
try {
driver.findElement(locatorKey);
return true;
} catch (org.openqa.selenium.NoSuchElementException e) {
return false;
}
}
public boolean isElementVisible(String cssLocator){
return driver.findElement(By.cssSelector(cssLocator)).isDisplayed();
}
Обратите внимание, что иногда селен может находить элементы в DOM, но они могут быть невидимыми, следовательно, селен не сможет взаимодействовать с ними. Поэтому в этом случае помогает проверка методов видимости.
Если вы хотите дождаться элемента до тех пор, пока он не появится, лучшим решением, которое я нашел, является использование свободного ожидания:
public WebElement fluentWait(final By locator){
Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(30, TimeUnit.SECONDS)
.pollingEvery(5, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class);
WebElement foo = wait.until(new Function<WebDriver, WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(locator);
}
});
return foo;
};
Надеюсь, что это поможет)
Ответ 2
Вместо того, чтобы делать findElement, findElements и проверять длину возвращаемых элементов равно 0. Вот как я работаю с использованием WebdriverJS, и я ожидаю, что то же самое будет работать в Java
Ответ 3
Невозможно прокомментировать Руководство по испытаниям Meteor, так как у меня нет репутации, но я хотел привести пример, который заставил меня довольно долго понять:
Assert.assertEquals(0, wd.findElements(By.locator("locator")).size());
Это утверждение проверяет отсутствие совпадающих элементов в DOM и возвращает значение Zero, поэтому утверждение проходит, когда элемент отсутствует. Также он потерпит неудачу, если он будет присутствовать.
Ответ 4
Используйте findElements вместо findElement.
findElements вернет пустой список, если не будут найдены совпадающие элементы вместо исключения. Кроме того, мы можем убедиться, что элемент присутствует или нет.
Ex: Элементы списка = driver.findElements(By.yourlocatorstrategy);
if(elements.size()>0){
do this..
} else {
do that..
}
Ответ 5
int i=1;
while (true) {
WebElementdisplay=driver.findElement(By.id("__bar"+i+"-btnGo"));
System.out.println(display);
if (display.isDisplayed()==true)
{
System.out.println("inside if statement"+i);
driver.findElement(By.id("__bar"+i+"-btnGo")).click();
break;
}
else
{
System.out.println("inside else statement"+ i);
i=i+1;
}
}