Попытка навести указатель мыши на вкладки и выполнить автоматический щелчок по определенному элементу в Selenium

Я пытаюсь навести указатель мыши на вкладку категории «Мужчины» и выбрать категорию «Рубашки» на этом Веб-сайт. Однако я не могу щелкнуть категорию «рубашки» в элементе «Мужчины», также я не получаю никаких сообщений об ошибках. Вот мой код:

public void PurchaseItemTest() throws InterruptedException, IOException {
        Thread.sleep(3000);

        //util.clickbyXpath(Constants.MENCATEGORYTAB);

         WebElement element = util.getdriver().findElement(By.xpath("//a[@class='accord-header' ]"));

            Actions action = new Actions(util.getdriver());

            action.moveToElement(element).moveToElement(util.getdriver().findElement(By.xpath("//a[@class='accord-header' and contains(.,'Men')]"))).moveToElement(util.getdriver().findElement(By.xpath("//a[@title='Shirts']"))).click().build().perform();

Обновите вопрос, указав соответствующий HTML для правильного анализа.

DebanjanB 10.05.2018 21:45

@DebanjanB, как вставить сюда соответствующий HTML-код. На самом деле, когда я копирую и вставляю HTML-код, сюда вставляется огромное количество HTML-кода.

chris stewart 11.05.2018 04:57
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
128
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это работает:

final By DROPDOWN = By.cssSelector("li[class='atg_store_dropDownParent']");
final By DROPDOWN_LINK = By.cssSelector("a[class='accord-header ']");

List<WebElement> dropdowns = new WebDriverWait(util.getDriver(), 5)
        .until(ExpectedConditions.presenceOfAllElementsLocatedBy(DROPDOWN));

WebElement men = dropdowns.stream()
    .flatMap(dropdown -> dropdown.findElements(DROPDOWN_LINK).stream())
    .filter(link -> link.getText().equals("MEN"))
    .findFirst()
    .orElse(null);

if (men != null) {
    new WebDriverWait(util.getDriver(), 5)
        .until(ExpectedConditions.elementToBeClickable(men));
    Actions action = new Actions(util.getDriver());
    action.moveToElement(men).build().perform();
    new WebDriverWait(util.getDriver(), 5)
        .until(ExpectedConditions.elementToBeClickable(SHIRTS))
        .click();
}

Ваш xpath для вкладки категории Men показался мне шатким. При наведении курсора обязательно дождитесь, пока ссылка «Рубашки» станет активной, прежде чем нажимать. Также избегайте использования Thread#sleep() с Selenium. Вместо этого используйте Явные ожидания.

Он работает абсолютно нормально, спасибо за ваши усилия .. Но я не могу понять, как это работает (особенно выпадающие списки). Не могли бы вы объяснить, что происходит в этом коде?

chris stewart 11.05.2018 04:23

Другие вопросы по теме