Мне нужно проверить наличие одного и того же элемента на нескольких страницах моего приложения - PullRequest
0 голосов
/ 04 ноября 2019

Мой сценарий - мне нужно проверить, присутствует ли кнопка на всех страницах, которые у меня есть в приложении.

На моей первой странице есть 20 таких элементов, и я взял размер, и если размер> 0 тогда тест проходит. Аналогичным образом, если у меня 5 таких страниц и общее ожидаемое количество элементов равно 96, то на всех первых четырех страницах будет 20, а на последней странице - 16.

Мне нужно общее количествовсе элементы и сравнить с общим количеством.

Я пытался за цикл, но не работает

String pageNumberText = objects.pageNum().getText();
String lastWord = pageNumberText.substring(pageNumberText.lastIndexOf(" ") + 1);
System.out.println(lastWord); int pageNumb = Integer.parseInt(lastWord);
for (int i = 1; i <= pageNumb; i++) {
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@id='tgbtn' and @class='tgbtn mainPriceContainer']")));
    System.out.println(pageNumberText);

    List<WebElement> dealBtn = driver.findElements(By.xpath("//*[@id='tgbtn']/a"));
    if (dealBtn.size() > 0) {
        Assert.assertTrue(true, "Deal button is present");
        System.out.println("Button verification of page " + i + " successful");
        System.out.println("No of deal buttons present are : " + dealBtn.size());
        objects.nextPageBtn().click();
    }
}

Результат, который я получаю, даже до перехода на следующую страницу, результат печатается

5
1 of 5
Button verification of page 1 successful
No of deal buttons present are : 20
1 of 5
Button verification of page 2 successful
No of deal buttons present are : 20
1 of 5
Button verification of page 3 successful
No of deal buttons present are : 20
1 of 5
Button verification of page 4 successful
No of deal buttons present are : 20
1 of 5
Button verification of page 5 successful
No of deal buttons present are : 20

Результат неверен Количество элементов на последней странице - только 16

И действие прекращается, когда загружается 2-я страница

Ответы [ 2 ]

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

Здесь я могу добавить две точки для исправления вашего кода: 1) Если вам нужно получить значение «96» в конце цикла, объявите List<WebElement> dealBtn за пределами цикла, создайте другую переменную такого же типа внутри цикла forи присвойте List<WebElement>, возвращаемому этим driver.findElements(By.xpath("//*[@id='tgbtn']/a")), этой локальной переменной. Позже, используя цикл for или какую-либо другую концепцию коллекций, добавьте локальные элементы List<WebElement> в глобальную переменную dealBtn. Таким образом, мы можем получить общее количество 96 в конце цикла for.

2) Ожидание элемента: первая строка в цикле for будет пытаться дождаться видимости элемента. Следовательно, вы можете добавить еще одно условие ожидания внутри оператора if после objects.nextPageBtn().click(); для ожидания невидимости того же элемента с помощью invisibilityOfElementLocated (). Таким образом, как только вы нажмете nextPageButton (), он будет ждать, пока элемент станет невидимым. Как только страница начнет перезагружаться, элемент исчезнет из DOM, и это условие ожидания будет выполнено. Позже он перейдет ко 2-му раунду цикла и будет ждать, пока страница не будет содержать этот элемент в DOM. Как и в этом случае, одно и то же выполнение будет повторяться до тех пор, пока цикл не будет прекращен ....

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

Попробуйте этот код:

String pageNumberText = objects.pageNum().getText();
        String lastWord = pageNumberText.substring(pageNumberText.lastIndexOf(" ") + 1);
        System.out.println(lastWord); int pageNumb = Integer.parseInt(lastWord);
        List<WebElement> dealBtn = new ArrayList<WebElement>();
        for (int i = 1; i <= pageNumb; i++) {
            wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@id='tgbtn' and @class='tgbtn mainPriceContainer']")));
            System.out.println(pageNumberText);

            List<WebElement> localData= driver.findElements(By.xpath("//*[@id='tgbtn']/a"));
        for(int index= 0; index < localData.size(); i++) {
            dealBtn.add(localData.get(index));
        }
            if (dealBtn.size() > 0) {
                Assert.assertTrue(true, "Deal button is present");
                System.out.println("Button verification of page " + i + " successful");
                System.out.println("No of deal buttons present in page-" + i + " are : " + localData.size());
                objects.nextPageBtn().click();
        wait.until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//div[@id='tgbtn' and @class='tgbtn mainPriceContainer']")));
            }
        }
        System.out.println("Total elements in all the pages are : " + dealBtn .size());
0 голосов
/ 05 ноября 2019

Я полагаю, что ваша проблема связана с условием ожидания:

   wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@id='tgbtn' and @class='tgbtn mainPriceContainer']")));

Дело в том, что этот элемент присутствует на каждой из ваших страниц, поэтому, когда вы нажимаете «NextPageBtn», условие выполняется сразу же,и выполнение не будет ждать, пока следующая страница фактически не будет загружена, поэтому все 5 выполнений выполняются очень быстро перед загрузкой следующей страницы, все (20) результаты являются результатами с первой страницы.

Что выследует попробовать подождать, пока номер текущей страницы в элементе нумерации страниц не станет равным i, или что-то в этом роде, означающее, что вы действительно достигли страницы, на которой ваш цикл ожидает вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...