Сделайте локатор элементов уникальным - PullRequest
1 голос
/ 11 ноября 2019

Я новичок в Selenium, практикующий Automation с использованием Eclipse, и я работаю над автоматизацией тестового примера с помощью следующих двух первых шагов:

Go to http://automationpractice.com/index.php
Verify -5% displayed on product 'Printed Summer Dress'

Для второго шага у меня возникла следующая проблема: Iне может создать уникальный локатор для элемента -5% на веб-странице. Я пробовал разные локаторы элементов, но в консоли элементов «Проверка», в строке поиска «Поиск по строке, селектору или Xpath» локаторы приносят несколько результатов, например, 1 из 8 или 1 из 4. Я определенно хочуубедитесь, что я использую уникальный локатор элементов, чтобы при запуске теста я получил полный результат.

Это элемент:

<span class="price-percent-reduction">-5%</span>

Насколько я могу судить, нет никаких других атрибутов элемента, кроме класса, поэтому я не могу использовать альтернативный атрибут.

Примечание: это не домашняя работа и не классная работа, а моя собственная практика.

Я попытался использовать следующие локаторы, но ни один из них не получил результат 1 из 1, то есть они не уникальны.

CSS --> span.price-percent-reduction
CSS --> span[class='price-percent-reduction']
XPath --> //span[text()='-5%']
XPath --> //span[@class='price-percent-reduction']

Я искал похожие вопросы здесь, в Переполнении стека, но не смог найти тот, который соответствует моему.

Ответы [ 3 ]

0 голосов
/ 11 ноября 2019

Чтобы получить уникальный элемент сокращения -5%, используйте следующий xpath.

//ul[@id='homefeatured'][.//a[@title='Printed Summer Dress']]//div[@class='right-block']//span[@class='price-percent-reduction'][text()='-5%']

Индуцируйте WebDriverWait и visibilityOfElementLocated ()

WebDriverWait wait = new WebDriverWait(driver, 20); 
WebElement itempricediscount=wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//ul[@id='homefeatured'][.//a[@title='Printed Summer Dress']]//div[@class='right-block']//span[@class='price-percent-reduction'][text()='-5%']")));
System.out.println(itempricediscount.getText());
0 голосов
/ 12 ноября 2019

Вот для этого css:

#homefeatured > li:nth-child(5) .left-block .price-percent-reduction

Что я делаю, это ищу его на панели хромированных элементов и продолжаю подниматься, пока что-то уникальное

0 голосов
/ 11 ноября 2019

Вы правы, предполагая, что поиск <span class="price-percent-reduction"> вернет несколько элементов. Похоже, вы пытаетесь найти конкретный продукт на странице, с процентным снижением цены. Поэтому вам нужно будет найти span в контексте искомого продукта.

Вот расширенный XPath, который просматривает название продукта и получает процентную скидку на основе этого:

//ul[@id='homefeatured']//div[h5/a[@title='Printed Chiffon Dress']]/div/span[@class='price-percent-reduction']

Этот селектор возвращает 1 результат -20%, который представляет собой процентную скидку на продукт Printed Chiffon Dress.

Это может быть обобщено на:

//ul[@id='homefeatured']//div[h5/a[@title='product title here']]/div/span[@class='price-percent-reduction']

XPath можетразделить его следующим образом:

На веб-сайте есть два списка продуктов - «Популярные» и «Бестселлеры». В этих двух списках продуктов есть дубликаты продуктов - некоторые «Популярные» товары также входят в список бестселлеров. Чтобы получить отдельный элемент продукта, нам нужно указать список. В приведенном выше XPath указан список «Популярные», указанный в предложении //ul[@id='homefeatured']. Обратите внимание, что это можно изменить на //ul[@id='blockbestsellers'], чтобы выбрать из списка «Бестселлеры».

После выбора //ul[@id='homefeatured'] мы запрашиваем продукт в списке, используя атрибут title, который появляетсявнутри пункта //div[h5/a[@title='product title here']]. Этот запрос указывает наш путь для поиска содержащего элемента div, который содержит заголовок product title here.

Как только мы выберем продукт на основе его названия, мы можем запросить вплоть до снижения цены в процентах, /div/span[@class='price-percent-reduction'] часть предложения.

С помощью полученного XPath вы можете изменить product title here на Printed Chiffon Dress или заголовок любого другого проекта и получить значение% off (-5%), которое отображается подэтот продукт.

Стоит отметить - я использую вспомогательное расширение XPath для своего Google Chrome, так что я могу тестировать большинство XPath в режиме реального времени и писать сложные оценки, такие как путь, который я написал выше. Это механизм, который я использовал для проверки этого XPath по указанному вами URL веб-сайта.

...