Как найти все элементы и нажать на них один за другим - PullRequest
0 голосов
/ 11 июля 2019

Я строю окончательный проект, и я застрял в проблеме. Веб-сайт: trello.com У меня есть страница, содержащая кнопки с досками, которые я создал, и кнопка для создания доски.

Я пытаюсь сохранить все эти кнопки, затем найти их по тексту и нажать на них.

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

Это мой код:

Это изображение страницы трелло с досками. https://ibb.co/kmV6V4n

private By mainBoardSelectorList = By.xpath("//*[@id=\"content\"]/div/div[2]/div/div/div/div/div[2]/div/div/div/ul");

public WebElement getMainBoardSelectorList() {
        return driver.findElement(mainBoardSelectorList);
}

   @Test
    public void getAllBoardsAndClick(){

        methodsManager.logIn();
        BoardsPage boardsPage = new BoardsPage(driver);
        System.out.println(boardsPage.getMainBoardSelectorList().getText());
        WebElement el = boardsPage.getMainBoardSelectorList();
        if (el.getText().contains("Create new board")){
            el.click();
        }
    }

11 июля 2019 12:42:26 org.openqa.selenium.remote.ProtocolHandshake createSession ИНФОРМАЦИЯ: Обнаруженный диалект: OSS HJ, Доска без названия Создать новую доску

Ответы [ 3 ]

0 голосов
/ 11 июля 2019

Вам нужно нажать на li теги, а не ul Вы можете изменить свою функцию getMainBoardSelectorList(), чтобы вернуться List<WebElement> вместо WebElement.

public List<WebElement> getMainBoardSelectorList() {
        return driver.findElement(mainBoardSelectorList).findElements(By.tagName("li")));
}

Теперь ваш метод возвращает все li элементы (доски), которые вам нужны. Я думаю, «Создать новую доску» всегда последний, поэтому вы можете сделать

List<WebElement> els = boardsPage.getMainBoardSelectorList();

els.get(els.size() - 1).click());

Не забудьте обработать исключения

0 голосов
/ 11 июля 2019
    Step 1: Navigate and Login 

    driver.get("https://trello.com/login");
    Thread.sleep(1000);
    driver.findElement(By.xpath("//*[@id='user']")).sendKeys("paste your username here");
    driver.findElement(By.xpath("//*[@id='password']")).sendKeys("paste your password here");
    Thread.sleep(2000);
    driver.findElement(By.xpath("//*[@id='login']")).click();
    Thread.sleep(3000);

    Step 2: To Click on First Board
    Here in xpath @title is your Board name so create xpath according this, for me test is First board name

    driver.findElement(By.xpath(".//div[@title='test']/descendant::div")).click();
    Thread.sleep(5000);
    driver.navigate().back();
    Thread.sleep(3000);

    Step 3 : To Click on Second Board

    Here in xpath @title is your Board name so create xpath according this, for me test1 is Second board name
    driver.findElement(By.xpath(".//div[@title='test1']/descendant::div")).click();
    Thread.sleep(5000);
    driver.navigate().back();
    Thread.sleep(3000);

    Step 3 : To Click on Third Board
    For Click on Create new board manage xpath from class name and click on it.

    driver.findElement(By.xpath(".//div[@class='board-tile mod-add']/descendant::span")).click();

    by this you can click all your board one by one. You can create function for manage xpath dynamically for board.
0 голосов
/ 11 июля 2019
  1. Дважды проверьте ваш селектор, так как он может совпадать с чем-то, что не кликабельно, или кликабельно, но ни к чему не приводит. Используйте инструменты разработчика браузера , чтобы выяснить, какие совпадения могут быть получены, если вы можете получить ложноположительные результаты
  2. Можно найти элемент по частичному тексту ссылки , например:

    driver.findElement(By.partialLinkText("Create new board"));
    
  3. Существует функция findElements () , которая возвращает Список WebElements, который больше подходит для вашего варианта использования
  4. Имейте в виду, что после того, как вы щелкнете по ссылке и уйдете со страницы, все WebElements будут признаны недействительными, и вы получите StaleElementReferenceException , поэтому либо подумайте о повторном выполнении команды "найти", как только вы вернетесь, либо лучше перейти на шаблон проектирования объектной модели страницы , который реализует тактику ленивой инициализации , когда дело доходит до поиска элементов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...