Есть ли способ, как проверить наличие элемента? Любой метод findElement заканчивался бы исключением, но это не то, что я хочу, потому что может случиться так, что элемент отсутствует, и это нормально, это не провал теста, поэтому исключение не может быть решением.
Я нашел этот пост: Selenium c # Webdriver: Подождите, пока элемент не появится, но это для C #, и я не очень хорош в этом. Кто-нибудь может перевести код на Java? Прошу прощения, ребята, я попробовал это в Eclipse, но я не совсем понял это в Java-коде.
Это код:
public static class WebDriverExtensions{
public static IWebElement FindElement(this IWebDriver driver, By by, int timeoutInSeconds){
if (timeoutInSeconds > 0){
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeoutInSeconds));
return wait.Until(drv => drv.FindElement(by));
}
return driver.FindElement(by);
}
}
java
selenium
selenium-webdriver
тестер
источник
источник
Ответы:
Используйте
findElements
вместоfindElement
.findElements
вернет пустой список, если не найдены подходящие элементы вместо исключения.Чтобы проверить наличие элемента, вы можете попробовать это
Это вернет true, если хотя бы один элемент найден, и false, если он не существует.
Официальная документация рекомендует этот метод:
источник
Как насчет частного метода, который просто ищет элемент и определяет, присутствует ли он следующим образом:
Это было бы довольно легко и делает работу.
Изменить: вы могли бы даже пойти дальше и принять в
By elementLocator
качестве параметра, устраняя проблемы, если вы хотите найти элемент по чему-то, кроме идентификатора.источник
Я обнаружил, что это работает для Java:
источник
presenceOfElementLocated
выдаст исключение, если элемент не найден при какой-либо конкретной попытке. Чтобы избежать этого, добавьтеwait.ignoring(NoSuchElementException.class);
оператор между первой и второй строкой.источник
Я была такая же проблема. Для меня, в зависимости от уровня разрешений пользователя, некоторые ссылки, кнопки и другие элементы не будут отображаться на странице. Часть моего набора тестировала, что элементы, которые ДОЛЖНЫ отсутствовать, отсутствуют. Я часами пытался понять это. Я наконец нашел идеальное решение.
Что он делает, так это говорит браузеру искать все элементы на основе указанных. Если это приводит к тому
0
, что это означает, что элементы, основанные на спецификации, не были найдены. Затем у меня есть код выполнения оператора if, чтобы сообщить, что он не был найден.Это в
C#
, так что переводы должны быть сделаны дляJava
. Но не должно быть слишком сложно.Есть также другой путь, который вы можете выбрать в зависимости от того, что вам нужно для теста.
Следующий фрагмент проверяет, существует ли на странице очень специфический элемент. В зависимости от существования элемента я могу выполнить тест if else.
Если элемент существует и отображается на странице, я
console.write
дал мне знать и двигаться дальше. Если рассматриваемый элемент существует, я не могу выполнить необходимый мне тест, что является основной причиной необходимости его настройки.Если элемент не существует и не отображается на странице. У меня есть еще в если еще выполнить тест.
Я знаю, что немного опоздала с ответом на ФП. Надеюсь, это кому-нибудь поможет!
источник
Попробуйте это: вызовите этот метод и передайте 3 аргумента:
Пример: waitForElementPresent (driver, By.id ("id"), 10);
источник
Вы можете ускорить выполнение кода, сократив время ожидания селен перед оператором try catch.
Я использую следующий код, чтобы проверить, присутствует ли элемент.
источник
Напишите следующую функцию / метод с использованием Java:
Вызвать метод с соответствующим параметром во время утверждения.
источник
если вы используете rspec-Webdriver в ruby, вы можете использовать этот скрипт, предполагая, что элемент действительно не должен присутствовать, и это пройденный тест.
Во-первых, сначала напишите этот метод из вашего файла класса RB
Затем, в вашем spec-файле, вызовите этот метод.
Если ваш элемент НЕ присутствует, ваша спецификация пройдет, но если элемент присутствует, он выдаст ошибку, тест не пройден.
источник
Это работает для меня:
источник
источник
Лично я всегда использую смесь приведенных выше ответов и создаю метод статической утилиты многократного использования, который использует
size() > 0
предложение:Это аккуратно, многоразово, ремонтопригодно ... все это хорошо ;-)
источник
Чтобы найти конкретный элемент или нет, мы должны использовать метод findElements () вместо findElement ().
это работает для меня .. предложите мне, если я ошибаюсь ..
источник
Это должно сделать это:
источник
Дать мой фрагмент кода. Таким образом, приведенный ниже метод проверяет , существует ли на странице случайная кнопка « Создать новое приложение » или нет. Обратите внимание, что я использовал период ожидания как 0 секунд.
источник
Я бы использовал что-то вроде (со Scala [код в старой «хорошей» Java 8 может быть похож на это)):
тогда
источник
Простейший способ, который я нашел в Java:
источник
Вы можете попробовать неявное ожидание:
Или Вы можете попробовать явное ожидание:
Явный проверит, присутствует ли элемент перед каким-либо действием. Неявное ожидание может быть вызвано в любом месте кода. Например, после некоторых действий AJAX.
Больше вы можете найти на странице SeleniumHQ
источник