Проблема в том, что есть два элемента, которые соответствуют вашему локатору. Поскольку вы используете .findElement
(в единственном числе), он возвращает первый, который оказывается скрытым, и остается скрытым, если вы не наведите первый навигационный элемент «Женщины».
Существует два способа Чтобы обойти это:
Сохраните тот же локатор, используйте .findElements
(множественное число) и щелкните второй элемент.
driver.findElements(By.xpath("//a[@title='Dresses']")).get(1).click();
^ gets the second element, the first is index 0.
Измените свой локатор, чтобы найти уникальный элемент, который вы хотите.
new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("#block_top_menu > ul > li > a[title='Dresses']"))).click();
Я предпочитаю второе, потому что вы можете добавить ожидание, а также потому, что это селектор CSS. Селекторы CSS более совместимы, более гибки, легче читаются (более простой синтаксис) и т. Д. c.
Дополнительные примечания. Чтобы избежать этой проблемы, всегда проверяйте локаторы в браузер. Я использую Chrome, потому что считаю его самым простым и мощным в использовании. Вы можете открыть devtools используя F12. Нажмите ES C, если консоль не отображается. В консоли вы можете проверить XPath с помощью $x()
, например, $x("//a[@title='Dresses']")
возвращает 2 элемента. Вы можете проверить CSS селекторов, используя $$()
, например, $$("#block_top_menu > ul > li > a[title='Dresses']")
возвращает только один элемент.