да нету таких методов, во всех случаях у вас будет вываливать ексепшин, потому надо будет его отлавливать
можно конечно через javascript, но это еще сложнее :)
да нету таких методов, во всех случаях у вас будет вываливать ексепшин, потому надо будет его отлавливать
можно конечно через javascript, но это еще сложнее :)
Видимо к моему случаю данный подход не применяется.
Возможно мысль неверно трактовал свою. Элементы на странице, которые нужно отследить - с разными локаторами.
Если делаю так - if driver.find_element_by_class_name("не существующий локатор").size == 0:
Ошибка: NoSuchElementException: Message: u'Unable to locate element:
Если делаю так - if driver.find_elements_by_class_name("не существующий локатор").size == 0:
Ошибка: AttributeError: 'list' object has no attribute 'size'.
Ясно :) Спасибо за ответы!
тогда надо тогда чтобы вы рассказали в конечном итоге, что вы хотите сделать.
может быть тогда, помощь будет более направленей :)
Добрый день! Какое условие можно использовать для проверки отсуствия элемента в условии цикла while?(Java)
Дело в том, что мне нужно повторять какое-либо действие, если элемент не видим, я долго мучался пробовал такие:
while (ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(".k-item-wrapper"))==null){
}
но такое выражение никогда null не принимает,
public boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
Это выкидывает исключение, а мне для цикла нужно просто, чтобы выражение давало false и все.
Замените конструкцию
driver.find_elements_by_class_name("не существующий локатор").size() == 0)
на
len(driver.find_elements_by_class_name("не существующий локатор")) == 0)
Ваша функция isElementPresent - как раз то, что надо. А что за ошибку она выкидывает? Вообще-то не должна.
А если использовать библиотеку Selenide, то вообще всё просто:
while (!$("#message").isDisplayed()) {
// do stuff
}
А почему вообще тест в цикле делает какие-то вещи? По-моему, нетипичная логика для тест. Тест не должен таким заниматься. Если есть элемент - всё в поряке, если нет - тест падает. Какие ещё циклы?
Мне это нужно для конкретного действия, а имеено - чтобы залогиниться на сайт, есть одна проблема, которая связана неопнятно с чем и вот ее суть:
1) На главной странице сайта есть только два поля - логин и пароль и кнопка войти
2) При заполнении полей и нажатии на кнопку иногда сайт затупливает и в адресной строке адрес уже изменился, но загрузки страницы не происходит и это не похоже на лаг сервера, потому-что сервер в этот момент отвечает на другие запросы. Может вебдрайвер тупит, может конкретно хромдрайвер, хрен его знает
С разработчиками на данную тему общался, они естественно сваливают все на сервер и мои утилиты.
Вот мне нужен цикл, чтобы при неудачной попытке войти сделать это еще раз.
By waitForMePlease = By.cssSelector(".k-item-wrapper");
...
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); // choose me...
WebDriverWait wait = new WebDriverWait(driver, 10); // ... or me
...
login("uName", "uPass");
...
// if (implicitWaits.equals(sucks)) { use(explicitWaits); }
WebElement ohGodImHere = wait.until(ExpectedConditions.visibilityOfElementLocated(waitForMePlease));
doSmthWithMe(ohGodImHere);
Как вариант, можно использовать js (jQuery) и делать что-то вроде (c#):
public bool isElementPresent(string locator)
{
return (bool)jsExec.ExecuteScript("return $('" + locator + "').size() != 0");
}
public boolean isElementPresent("mimg") {
try {
chromeDriver.findElement(By.className("mimg"));
return true;
} catch (NoSuchElementException e) {
return false;
}
}
assertFalse(isElementPresent("mimg"))
Подскажите в чем моя ошибка?
Для начала замените строки на аргументы функции
public boolean isElementPresent(“mimg”) -> public boolean isElementPresent(mimg)
chromeDriver.findElement(By.className(“mimg”)) -> chromeDriver.findElement(By.className(mimg))
Я работаю по Page Object и в ходе разработки тестов нужно реализовывать методы , которые являются универсальными для всех локаторов…
Делюсь с вами своей реализацией . В зависимости от того,какой локатор использую - такой метод и вызываю и передаю в него просто String-локатор.
JAVA пример :
private void assertElementNotPresentBase(By element) throws IllegalArgumentException {
java.util.List<WebElement> sizeElement = driver.findElements(element);
if (sizeElement.size() == 0) {
System.out.println("Element not displayed");
} else {
System.out.println("Element is displayed");
}
}
public void assertElementNotPresentById(String elementById) {
By element = By.id(elementById);
assertElementNotPresentBase(element);
}
public void assertElementNotPresentByXpath(String elementByXpath) {
By element = By.xpath(elementByXpath);
assertElementNotPresentBaseelement);
}