Selenium - Java - как подтвердить / проверить, что все ссылки на странице работают, получить заголовок и проверить соответствие ожидаемым заголовкам - PullRequest
0 голосов
/ 28 мая 2020

Я новичок в автоматизации тестирования и в настоящее время работаю над личным проектом

У меня есть этот метод, в котором он находит все ссылки для раздела на странице, нажимает на каждую ссылку, раздражает каждую вкладка, а затем получает заголовок каждой страницы

Однако мне нужен способ проверки заголовков этих ссылок со списком ожидаемых заголовков

Каким будет лучший способ изменить это в для этого? было бы лучше хранить в массиве, а затем утверждать / проверять каждый заголовок отдельно?

Я пробовал несколько способов утверждать, изменяя тип возвращаемого значения на String, а также на List, но безуспешно

public void linksAreWorkingDashBoardLeftPanal() throws Exception {

    List<WebElement> li_All = links_myAccountNav.findElements(By.tagName("a"));
    for(int i = 0; i < li_All.size(); i++){

        String clickOnLinkTab = Keys.chord(Keys.CONTROL, Keys.ENTER);
        links_myAccountNav.findElements(By.tagName("a")).get(i).sendKeys(clickOnLinkTab);
        Thread.sleep(5000);

    }

    //Opens all the tabs
    Set<String> getTitleinWindow = driver.getWindowHandles(); 
    Iterator<String> it = getTitleinWindow.iterator();

    while(it.hasNext())
    {

          driver.switchTo().window(it.next());
          System.out.println(driver.getTitle());
    }

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Спасибо! Я взял то, что мне нужно, из вашего кода, и он отлично сработал.

эта работа, и я добавил свое собственное утверждение

    List<WebElement> li_All = links_myAccountNav.findElements(By.tagName("a"));
    for(int i = 0; i < li_All.size(); i++){

        String clickOnLinkTab = Keys.chord(Keys.CONTROL, Keys.ENTER);
        links_myAccountNav.findElements(By.tagName("a")).get(i).sendKeys(clickOnLinkTab);

        }//Opens all the tabs 
        Set<String> getTitleinWindow = driver.getWindowHandles();
        Iterator<String> it = getTitleinWindow.iterator();

        // Get the expected titles in a list. 
        // You have to initiate and add expected titles to this list, before running the while loop.

        List<String> expectedTitleList = new ArrayList<>(); 
        expectedTitleList.add("Page 1 title");
        expectedTitleList.add("Page 2 title");
        expectedTitleList.add("Page 3 title");
        expectedTitleList.add("Page 4 title");
        expectedTitleList.add("Page 5 title");
        expectedTitleList.add("Page 6 title");
        expectedTitleList.add("Page 7 title");

        List<String> actualTitleList = new ArrayList<>();
           while(it.hasNext())
         {
                driver.switchTo().window(it.next());
                actualTitleList.add(driver.getTitle());
         }

        //System.out.println(expectedTitleList);
        // System.out.println(actualTitleList); 

    if(actualTitleList.equals(expectedTitleList)).....
0 голосов
/ 28 мая 2020

Измените while l oop следующим образом:

List<String> expectedTitleList = new ArrayList<>(); 
// Get the expected titles in a list. 
// You have to initiate and add expected titles to this list, before running the while loop.

List<String> actualTitleList = new ArrayList<>();
    while(it.hasNext())
    {
          driver.switchTo().window(it.next());
          actualTitleList.add(driver.getTitle());
    }

// Create copies of each list;
Set<String> expectedSet = new HashSet<>(expectedTitleList);
Set<String> actualSet = new HashSet<>(actualTitleList);

Set<String> expectedOnlySet = new HashSet<>(expectedSet);
Set<String> actualOnlySet = new HashSet<>(actualSet);

expectedOnlySet.removeAll(actualSet);
actualOnlySet.removeAll(expectedSet);

// Check if expectedOnlySet and actualOnlySet are empty
// If both of them are empty then all titles are received as expected.

boolean isEmpty = (expectedOnlySet.size() == 0 && actualOnlySet.size() == 0);

if (expectedOnlySet.size() > 0 || actualOnlySet.size() > 0) {
   // If expectedOnlySet contain any title; it means those titles are not opened in the browser.

   // If actualOnlySet contain any title; it means those titles are not expected titles.
   StringBuilder message = new StringBuilder();

   for (String x: expectedOnlySet) {
       message.append("Did not receive: ");
       message.append(x).append(", ");
   }

   for (String y: actualOnlySet) {
       message.append("Not expected but received: ");
       message.append(y).append(", ");
   }

   Assert.assertTrue(false, message,toString());
}else {
   Assert.assertTrue(true);
}

Здесь вы можете использовать метод removeAll () в Коллекциях. Проверьте документацию

Мы должны проверить оба сценария;

  1. Получены ли все ожидаемые заголовки
  2. Все полученные заголовки ожидаются
...