Java еще, если заявление в пределах селена webdriver- отрицательный тест - PullRequest
0 голосов
/ 10 октября 2018

Итак, я тестирую добавление предмета в корзину, но реально я хочу выбрать 1-й предмет, если он есть, и еще, если выбрать второй, но в списке https://www.prana.com/men/tops/shirts.html для предметов нет списка.Поэтому я выбрал css-селектор для каждого из изображений.Чтобы также иметь возможность иметь несколько элементов, я хотел использовать if-if if для выбора между Элементами.У меня есть:

if (driver.findElement(By.cssSelector("a[title='Weathered Blu22e']")).isDisplayed())
{
    driver.findElement(By.cssSelector("a[title='Weathered Blue']")).click();
}
else if (driver.findElement(By.cssSelector("a[title='Equinox Blue']")).isDisplayed ) 
{
    driver.findElement(By.cssSelector("a[title='Weathered Blue']")).click();
}

первая строка с "Blu22e" не является правильным названием CSS, но синий - это ... когда у меня есть "синий", он выбирает элемент правильно, но когда я вставляю в Blu22e (чтобы выполнить отрицательный тест и перейти к оператору else if, я вижу эту ошибку:

no such element: unable to locate such an element.

Любые идеи, как я могу отрицательно проверить первую строку? Я хочу пропустить это иперейти к следующему утверждению Извините за недостаток знаний. Я стажер и все еще хожу в школу, так что мой Java не на высоте.

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Если вы посмотрите в javadocs на WebDriver, вы увидите: findElement не должен использоваться для поиска отсутствующих элементов, используйте findElements (By) вместо ответа с нулевой длиной.Так что это может быть как:

if (driver.findElements(By.cssSelector("a[title='Weathered Blu22e']")).size() > 0)
{
    driver.findElement(By.cssSelector("a[title='Weathered Blue']")).click();
}
else if (driver.findElements(By.cssSelector("a[title='Equinox Blue']")).size() > 0) 
{
    driver.findElement(By.cssSelector("a[title='Weathered Blue']")).click();
}
0 голосов
/ 10 октября 2018

Насколько я понимаю, ваш вариант использования вы хотите щелкнуть по элементу cssSelector("a[title=''Weathered Blu22e'']"), и если он недоступен в HTML DOM , в котором вы хотите щелкнуть по элементу cssSelector("a[title='Weathered Blue']")

В этом случае вам необходимо заключить логику в блок try-catch{} следующим образом:

try {
    driver.findElement(By.cssSelector("a[title='Weathered Blu22e']")).click();
} catch (NoSuchElementException e) {
    driver.findElement(By.cssSelector("a[title='Weathered Blue']")).click();
}
...