Добрый вечер.
Я новичок в автоматизации тестирования и у меня возник следующий вопрос:
Каким образом можно получить элементы не используя xpath, cssselector и т.д. и можно ли вобще обойтись без них?
Я понимаю, что использование строк типа:
xpath =“//*[@id="root"]/div/div/div[2]/div/div[2]/div[2]/div/div/div/div/div/div/div[2]/table/tbody/tr”
в любом случае приведет в будущем:
к проваленным тестам с эксепшеном типа: Unable to locate element, т.к. у нас часто меняют интерфейс(что-то убирают, что-то добавляют)
такие пути в целом смотрятся не очень эстетично, если можно так выразиться:see_no_evil:
Причем гугл на запросы типа: selenium java how to locate elements without using xpath cssselectors and others выдал следующие результаты:
Нашла еще использование Page Object Pattern здесь Tools QA - Page Not Found
Где в целом решается проблема п.2) - код действительно становится более красивым, но по прежнему необходимо указать путь(каким либо образом) к конкретному элементу, используя @FindBy аннотацию.
У меня возникала идея создавать ArrayList со всеми найденными объектами к примеру по xpath =“//*[@id="root"]/div/div/div[2]/div/div[2]/div[2]/div/div/div/div/div/div/div[2]/table” и уже среди элементов листа искать по каким-либо параметрам необходимые мне элементы
В целом я понимаю, что возможно не обойтись без использования указания на тот или иной элемент(или до группы элементов), но все же может есть еще какие-то подходы к поиску конкретных элементов?
Нет, без них обойтись не можно никак. Только какой-то локатор. И даже если Вы воспользуетесь каким-то инструментом для записи, все равно будет использоваться какой-то автоматически выбранный локатор, скорее всего неоптимальный.
Спасибо за ответ, я настолько новичок, что в некоторых вопросах возможно бесконечно глуплю:grimacing: понятия не имела про то что, xpath может быть не абсолютным уже все прогуглила
Теперь в принципе понятно, что вопрос стоит: как построить хороший локатор
Анастасия, ну и как без знания xpath можно вообще иметь представление о том, что такое элемент на странице? Там нет ничего сложного, нужно всего лишь понять что такое родитель для элемента, изучить функцию contains(), конструкцию поиска по тексту [.=‘что-то’] и уметь использовать 2 вида поиска // и /. А на сладкое вам будет обратный поиск /… родителя для элемента. Не думаю что кого-то устраивают поиски элемента по id, name, class и тд. Симпл-поиски это для тривиальных задач, а чтобы решать задачи посложнее - без xpath не обойтись, имхо.
Вот вам, кстати, немного мана, курите на здоровье: ТЫК и ТЫК
В принципе можно, задавая координаты x,y расположения обьекта на странице. Есть специальные фреймворки для этого. Но сразу предупрежу, что штука крайне нестабильная. Но, когда требуется протестить flash, то альтерантивы считай нет.
В принципе обходится без xpath нужно, считайте xpath крайним вариантом и используйте его только в последнюю очередь (именно так как написано в вашем списке, он на последнем месте не просто так). Если без него никак то попробуйте обсудить эту проблему с Вашими разработчиками и добавить более высокоуровневые локаторы. Xpath в любом случае со временем приведет Вас к куче обвалившихся тестов, и поверте мне если свойства PageObject будут иметь не очень информативные имена Вы не вспомните на какой элемент указывал Ваш Xpath и поддержка автотестов привратится в сущий ад!
Вообще можно использовать SiculiX (без острой необходимости не советую). Но он довольно нестабилен. Хотя все решается. А так разбирайтесь с Xpath. Очень пригодится.