Перейти к содержимому

Petrov.Sergey

Регистрация: 11 июл 2013
Offline Активность: 04 фев 2021 20:52
-----

#125455 Обработка исключения java.lang.NullPointerException

Написано Petrov.Sergey 26 декабря 2013 - 09:03

element = selenium.getXpathCount("путь до локатора");

Пробовала назначать element ,в качестве массива (int) - появляется ошибка:
java.lang.NullPointerException

Гугл, по данной ошибке, выдает информацию, что массив создан и его элементы инициализированы значением null.

Собственно вопрос, как правильно инициализировать элемент, чтобы значение задавалось корректно, а именно индекс элемента, с помощью xpath.
Заранее спасибо за ответ!

1) java.lang.NullPointerException означает не то, что массив инициализирован нуллами, а то, что Вы пытаетесь обратиться к какому-то объекту, считая его ненулловым, в то время как на самом деле он нулловый.
2) Честно говоря, вообще не понял, чего Вы хотите добиться.
Объяснили бы словами "беру то, хочу это", а не вставляли разрозненные куски кода, которые только запутывают.
Вы хотите получить количество элементов, находимых по локатору? Если да, то ответ уже прозвучал выше:

На WebDriver количество вычисляется как-то так:
int count = driver.findElements(By.xpath("XXXX")).size();


  • 1


#125453 Обработка исключения java.lang.NullPointerException

Написано Petrov.Sergey 26 декабря 2013 - 08:57

Смотрите, element у вас типа java.awt.Point[].
А функция selenium.getXpathCount() какого типа выдаёт результат, скорее всего WebElement?
Если эти типы не совпадают, то и будет ошибка.

Есть такая полезная команда как driver.findElements(By.xxx);
она выдаёт массив элементов, к которым вы можете обращаться по индексу.

List<WebElement> massivElementov = driver.findElements(By.xxx);
massivElementov.get(номер элемента); // так можно обратиться к некоторому элементу в массиве

int elemCount = types.size(); // количество элементов в массиве

1) Метод getXpathCount("...") считает количество элементов, найденных по локатору
Его аналог в WebDriver - это driver.findElements(By.xpath("...")).size();

2) метод getXpathCount возвращает тип Number, из которого int вытаскивается так:
Number k = selenium.getXpathCount("...");
int a = k.getValue();

  • 1


#125273 Создать список url по условию

Написано Petrov.Sergey 20 декабря 2013 - 07:54

Господа приветствую.
Начал изучать селениум, столкнулся как и все с вопросом: "хочу, но не знаю как."
Поискал по гуглу не нашел.
Вопрос: Возможно без перебора циклом атрибутов href, создать список url, которые проходят по шаблону.
Например возьмем страничку данного сайта
1) как можно получить urlы, если они содержат слово trainings
2) и обратная задача, как зная список исключений получить эти url (например job, shop и тд)

Буду очень благодарен за ответ.

Так как обработка тестов идет в excel использую vba, но не суть.
Список получаю так, не оптимально, но работает)

Set links = driver.findelements(By.CssSelector("a"))
Set return = driver.executeScript("return arguments;", links)
и дальше 
test_str = return(i).getAttribute("href") <> "shop" 
If InStr(1, test_str, "shop")>0 then
эта ссылка нам не нужна
и тд


Так пойдёт (Java-код, т.к. VBA не знаю)?
List<WebElement> links = driver.findElements(By.xpath("//a[@href]")); // все ссылки на странице
		List<WebElement> result_forbid = driver.findElements(By.xpath("//a[@href!='shop' and href!='job']")); // все ссылки, которые не равны shop & job
		List<WebElement> result_training = driver.findElements(By.xpath("//a[@href='training']")); // все ссылки, которые равны training

  • 1


#124961 Что такое "list of validation rules"

Написано Petrov.Sergey 10 декабря 2013 - 19:46

Добрый день! Объясните пожалуйста, что подразумевается под списком правил валидации полей формы регистрации (Email, password, etc.)?

Какое-то слишком формализованное название.
Как я понял, подразумевается список ограничений и паттернов на поля, а также их обязательность:
1) email должен соответствовать регулярному выражению [A-Za-z0-9.%+\\-]+@[A-Za-z0-9.\\-]+\\.[A-Za-z]{2,4}
2) пароль должен иметь минимальную длину, максимальную длину и список допустимых символов
3) и т.д.
  • 2


#124598 Selenium не находит локаторы

Написано Petrov.Sergey 01 декабря 2013 - 18:31

Переформулирую: установи firefox 20.01 и webdriver 2.31 и попробуй.

А Вас не смутило, что ТС использует HtmlUnitDriver, а не FirefoxDriver?

Вопрос к ТС-у: не пробовали использовать другой драйвер (например, FirefoxDriver или ChromeDriver)?
  • 2


#124065 Selenium2+Thucydides+Java. Тестирование результата поиска = переход ку

Написано Petrov.Sergey 19 ноября 2013 - 11:20

Дайте, пожалуйста, скрин (можно только необходимый кусок) и HTML-код заскриненного куска + 2 тэга по иерархии вверх.


К сожалению, ни того, ни другого сделать не имею права.

Вообще-то, если Вы ищете элементы (список) по ID, первый из которых - В11 - удовлетворяет запросу поиска, то очевидно, в найденном списке будут находиться только элементы В11*, где * - null или присутствие символа (+ возможно, следующие, хотя вряд ли).

Я бы рекомендовал вам сделать два поиска:
List<WebElement> globalList = driver.findElements(By); // по какому критерию будете искать список всех элементов = В10, В10А, ... В11, В11А, ...
List<WebElement> localList = driver.findElements(By); // Ваш локальный список только по В11*

  • 1


#123920 [JAVA] Как правильно хранить пользователя?

Написано Petrov.Sergey 13 ноября 2013 - 09:07

Кстати, я правильно понимаю, что геттеры никак не меняются в этом случае и мы имеем обычные куски кода, которых будет тоже дофига:

Я же написал: все геттеры и сеттеры не являются необходимыми. Объявите только нужные методы, которые будете использовать далее.
Например, если в разных точках проекта (в разных тестах) Вам нужно будет вытаскивать из объекта userData разные поля (в общей сложности - все поля). Тогда Вам нужны будут все геттеры.
Если ни в одном тесте Вы не будете менять значения полей объекта, то сеттеры Вам не нужны. Ни один!
  • 1


#123919 [JAVA] Как правильно хранить пользователя?

Написано Petrov.Sergey 13 ноября 2013 - 09:01

Я не использую этот класс, собирался использовать обычные стандартные классы типа scanner, но как говорят в зарубежных интернетах, использование Split не совсем правильно, ибо встречаются ошибки (см. комментарии к статье). Все советуют opencsv, причем там даже есть метод, который весь файл переводит в List :)

Ещё раз спасибо за информацию, буду дальше работать над тестами.

Вы, вероятно, не прониклись смыслом сплита.
Сплит работает по регулярным выражениям.
Символ «"» - резервированный символ JAVA. Из-за этого сплит для него может вызвать проблемы с конвертацией.
Почему символ «'» может вызвать проблемы, сходу не пойму.

Со стандартными разделителями сплит никогда на моей практике не подавал причин не доверять себе.
  • 1


#123914 [JAVA] Как правильно хранить пользователя?

Написано Petrov.Sergey 13 ноября 2013 - 08:16

Можно в классе UserData, в котором объявлены все поля, задать недефолтный конструктор.

Пример объявления:
public class UserData {
   private String firstname = ""; // рекомендую задавать всем внутренним полям дефолтные значения, чтобы потом не столкнуться с NPE
   private String lastname = "";
   private String middlename = "";
   private String gender = "9"; // 0 = female, 1 = male, 9 = undefined
   // поля приватные, чтобы обращение к ним шло только через геттеры и сеттеры. Вопрос безопасности и чистоты кода.

   public UserData() { } // дефолтный конструктор необходимо объявлять всегда, когда присутствует недефолтный. Если недефолтных конструкторов нет, то дефолтный объявлять не обязательно - JVM сама его объявит при компиляции.

   public UserData(String[] line) { // это уже недефолтный конструктор, принимающий на вход массив стрингов и распределяющий этот массив по полям класса.
      this.firstname = line[0];
      this.lastname = line[1];
      this.middlename = line[2];
      this.gender = line[3];
      // по-хорошему, правильнее было бы учесть длину входного массива, чтобы не было падения IndexOutOfBoundException, когда мы хотим взять из массива элемент, которого нет по индексу.
      // тогда надо для каждого поля писать проверку:
      // if (line.length > 4)
      //    this.anotherField = line[4]; 
   }

   // дальше набор геттеров и сеттеров, которые могут пригодиться в дальнейшем (все не надо)
}
Пример использования:
....
Scanner in = new Scanner(new File("file_full_path/filename.csv"));
List<UserData> userDataList = new ArrayList<UserData>();
while (in.hasNext()){
   String[] line = in.nextLine().split(";"); // стандартно CSV имеет разделитель ";". Если разделитель другой - ставьте тот, который указан в файле (табулятор, запятая, пробел, другая какая-нибудь загогулина)
   userDataList.add(new UserData(line)); // тут у нас все данные запихиваются в объект класса UserData и присоединяются к списку всех юзеров
}
....
Как видите, подготовка (описание конструктора) большая, а использование - по одной строчке каждый раз.

Кстати:
1) отчество называется middlename
2) пол - лучше gender, а не sex

Объясните, пожалуйста, причину использования класса CsvReader?
  • 2


#123901 Прошу оказать помощь в написании TestCases

Написано Petrov.Sergey 12 ноября 2013 - 16:50


Окошко открытия файла - виндовое API, не относящееся конкретно к PowerPoint.
Так как подразумевается тестирование открытия файлов PowerPoint, то я бы выделил следующие параметры:
1) местоположение (диск, винчестер, вирт. диск, сеть и т.д.)
2) расширение (стандартное от PP + несколько чужих = TXT, BAT, EXE и т.д.)
3) размер файла (0, "любое среднее", 2Гб)
4) чужой файл, переименованный в PP
5) свой файл с чужим расширением
6) свой файл с изменёнными/удалёнными первыми 2 байтами.

Больше сходу не придумаю.

Я так понимаю, вы изложили логические модули? А по ним, в свою очередь, можно уже и составить Test Case Headears, непосредственно и сами Test Cases?

Ну, кто как называет. Может быть, и "модули".
Я бы назвал это параметрами, по каждому из которых будет ряд тест-кейсов (от одного до ~25, как в случае с расширением).

А вообще, как редиску ни назови - хоть морковкой, хоть огурцом - она редиской и останется. Вопрос только в соглашении, что как называть.
Так и в этом случае. Важно понимание и качество. А остальное оставим теоретикам :wink:
  • 1


#123897 Прошу оказать помощь в написании TestCases

Написано Petrov.Sergey 12 ноября 2013 - 14:18


3) размер файла (0, "любое среднее", 2Гб)

А почему именно 2 Гб выбран максимумом?

Вот, почему: http://www.pptfaq.co...t_files_be-.htm
Да, кстати, нужно ещё один размер взять: >5 Гб
  • 1


#123121 Проверка таблицы и проверка "перелистывания страниц"

Написано Petrov.Sergey 21 октября 2013 - 11:23

Всем добрый день,
на данный момент два вопроса.
Вопрос первый. На сайте есть возможность выбора «количество машин на странице» (5 – 10 – 15 - 20) . Выбирая 5, в таблице 5 строчек с пятью разными мышинами(каждая строчка одна машина). Выбирая 10, таблица увеличиваеться до 10 строчек и т.д.
Мне мужно проверить работает ли правильно «переключатель» «количество машин на странице». Если 5 машин, то должно быть пять строчек и так далее.
Т.к. я не знаю как пересчитать таблицу на количество строк, я проверяю одну из ячеек первой строчки и последней. Но это не очень правельный выход.

Вопрос второй.
На этой же странице нужно проверить правильное «перелистывания страниц». Страницы перелистываю(между перелистыванием вставила паузу, что бы успела загрузиться страница), но как же узнать на правильной ли я странице?!

Добрый день!

Признаюсь, я не знаю, как это сделать в Selenium IDE (как я понял, Вы используете именно его, да?)
Я знаю, как сделать это при помощи программирования :(

С перелистыванием.
А каким образом Вы глазами определяете, что страница перелистнулась?
Номер страницы есть? Если есть, проверяйте его. Как правило, номер активной страницы как-то выделяется относительно других (не содержит ссылки, выделен жирным и т.д.)
  • 1


#123065 Логгирование действий Selenium WebDriver

Написано Petrov.Sergey 18 октября 2013 - 19:59

А зачем мне логировать "НЕ ВСЕ"? :)))

Затем, чтобы не утонуть в логах при анализе.
Логирование должно быть только нужного, а не идти потоком всего и вся.

Зачем я сейчас буду отходить от основной цели (написание тест-кейсов и кода) и начну ковыряться в настройках и логгировании ошибок?

Не отходите. Нужно что-то узнать при конкретном действии - System.out.println() Вам в помощь. А try-catch ещё лучше, ибо дополнительно к нужным Вам выводам в консоль отловит любое исключение при падении.

Тем более простой try catch не вариант, ибо у профессионалов там все гораздо серьезнее реализовано (судя по беглому просмотру гугла).

Вы действительно считаете, что профессионалы логируют каждый чих селениума?

Поэтому я и прошу - как мне включить простейшее СТАНДАРТНОЕ логгирование в selenium webdriver!!!!

Правильно заданный вопрос - это уже половина ответа :yes:

Если вы не знаете как это сделать, то прошу на этом Ваши комментарии прекратить.

Прежде, чем что-то делать, надо уметь отвечать (хотя бы себе самому) на три главных вопроса по порядку:
1) ЗАЧЕМ мне это нужно?
2) ЧТО именно я хочу сделать?
3) КАК я это буду делать?
Вы не можете внятно ответить даже на первый, но начинаете хамить. Нехорошо. :acute:

Не волнуйтесь, мы пообщаемся, когда я буду рефакторить код и думать как логгировать лучше :))))

Боюсь, с Вашим стилем ведения диалога наше с Вами обсуждение Вашего рефакторинга маловероятно.

Удачи!
  • 1


#123061 Логгирование действий Selenium WebDriver

Написано Petrov.Sergey 18 октября 2013 - 16:15

Спасибо! А как теперь сделать так, чтобы выводить в консоль не только ошибки, но и логгировать каждый клик или ввод текста? :) Что-то на тему LOG_LEVEL = INFO или как-то так?

Именно это я и спросил в первом комментарии: зачем Вам логировать абсолютно всё?
Вы хотите удостовериться, что клик действительно произведён? А глазами в браузере не видно?
  • 1


#123053 Логгирование действий Selenium WebDriver

Написано Petrov.Sergey 18 октября 2013 - 14:22

Доброго времени суток.

Приступил к изучению автоматизации тестирования и возник вопрос.
Если пользоваться Selenium IDE, то можно переключить логи в INFO и смотреть через плагин Mozilla все действия selenium-а.

Теперь вопрос номер 1:

Написав программу в java, я до сих пор не разобрался как включить аналогичное Selenium IDE логгирование в консоли. Подскажите, пожалуйста.
Гугление по java.utils.logging ничего не дало (туповат, наверное?)
гугление по selenium webdriver logging тоже ничего не дало.
Перепробовал все с capabilities, driver.manage.logs и т.д.
Пока я не использую никаких фреймворков и т.д. - только чистый eclipse.


Вопрос номер 2:

А стоит ли включать полное логгирование или лучше каждое действие типа
driver.findElement(By.id(ShortForm.getGoToNextStepId())).click();
сопровождать кодом System.out.println("Clicking blah-blah");

Также видел, что можно как-то на ивенты поставить определенные условия, но не разобрался.


В общем на данный момент такая каша в голове, не судите строго, а лучше помогите :))))

А зачем Вам вообще логировать каждое действие?
Это ещё можно понять, когда тестов максимум десять, и все они короткие.
Но если их несколько сотен, а то и тысяч? Вы представляете, какая свалка мусора будет в логе?

Если Вам очень сильно хочется отловить момент ошибки, то можете обернуть в try-catch нужные блоки с выводом в лог нужного текста в случае возникновения ошибки в этом месте.
В результате в лог-файле / консоли Вы увидите только нужную информацию.
  • 1