Как проверить ссылки на странице в Selenium - PullRequest
0 голосов
/ 11 февраля 2020

Как проверить под-ссылки на странице в Selenium. У меня есть страница событий. Затем со страницы событий я собираю ссылки на разные события. Затем я хочу рекурсивно запускать тесты по этим ссылкам.

Я прикрепил изображение страницы. Зеленый текст - это все ссылки. Итак, я собрал href значения всех этих. После этого у меня есть несколько тестов для запуска на этих страницах. У меня есть тестовый класс с именем EventsPageTest для главной страницы. Тестовый класс для подстраниц называется SingleEventsPageTest . Как перенести значения href из основного класса в другой класс. Или есть какой-то другой метод, которому я должен следовать. Я искал inte rnet так много, но это было бесполезно. Любая помощь будет оценена. Спасибо

Screenshot

EventsPageTest

package test;
import pages.EventsPageObjects;

@Listeners(listeners.TestListener.class)
public class EventsPageTest {

    private static ExtentHtmlReporter htmlReporter;
    private static ExtentReports extent;
    private static ExtentTest test;
    static WebDriver driver = null;
    private static EventsPageObjects eventsPage;
    public MutableCapabilities capabilities;
    static Set<String> eventsLinks = new HashSet<String>(); 
    String url;


    @BeforeSuite
    public void setUp() {

        // initialize the HtmlReporter
        htmlReporter = new ExtentHtmlReporter("extentReportsEventsPage.html");

        // initialize ExtentReports and attach the HtmlReporter
        extent = new ExtentReports();

        // attach only HtmlReporter
        extent.attachReporter(htmlReporter);
    }



     @BeforeTest
     public void setUpTest() throws IOException{
         WebDriverManager.chromedriver().setup();
            driver = new ChromeDriver();

            url = "abc.com";
            driver.get(url);

            System.out.println("Inside setUpTest");

            //Create eventsPageObject
            eventsPage = new EventsPageObjects(driver);

     }

    @Test(alwaysRun=true)
    public void collectEventsLinks() throws InterruptedException, IOException {

        test = extent.createTest("Collect all Events Links on a page","Test to Collect all Events Links on a page ");

        test.log(Status.INFO, "Starting Test Case");

        List<WebElement> links = driver.findElements(By.tagName("a"));

         for (int i = 0; i<links.size(); i++) {  
           if(Pattern.matches("^https://"+ TestRunner.url +"/events/[^/]+[^\\s]$", links.get(i).getAttribute("href")))
               eventsLinks.add((links.get(i).getAttribute("href")));
         }

         test.log(Status.INFO, "Finished Test Case");

    }


    @AfterTest(alwaysRun = true)
    public void tearDownTest() {
        //close browser
        driver.close();
        driver.quit();
    }

    @DataProvider(name="getURLS")
    @AfterTest
    public Object[] getURLS() {

        System.out.println("Inside get Urls");
        System.out.println("getURLS : " + eventsLinks.size());

        Object[] objArray = eventsLinks.toArray();

        System.out.println(eventsLinks.size());

        return objArray;
    }

    @AfterSuite
    public void tearDown() {
        extent.flush();
    }
}

SingleEventsPageTest

package test;

@Listeners(listeners.TestListener.class)
public class SingleEventsPageTest{

    private static ExtentHtmlReporter htmlReporter;

    private static ExtentReports extent;
    private static ExtentTest test;
    static WebDriver driver;
    private static SingleEventsPageObjects singleEventsPage;
    static List<Object> eventsURLS = new ArrayList<Object>();


    @BeforeSuite
    public void setUp() {
        PropertiesFile.getProperties();

        // initialize the HtmlReporter
        htmlReporter = new ExtentHtmlReporter("extentReportsSingleEventsPage.html");

        // initialize ExtentReports and attach the HtmlReporter
        extent = new ExtentReports();

        // attach only HtmlReporter
        extent.attachReporter(htmlReporter);
    }


     @BeforeTest
     public void setUpTest() throws IOException{
         WebDriverManager.chromedriver().setup();
            driver = new ChromeDriver();

            //Create eventsPageObject
            singleEventsPage = new SingleEventsPageObjects(driver);
     }

    @Test(dataProvider="getURLS",dataProviderClass=EventsPageTest.class,alwaysRun=true)
    public void findIfEventsTitleExists(String url) throws InterruptedException, IOException {

        driver.get(url);

        System.out.println("Inside findIfEventsTitleExists : " + driver.getCurrentUrl());

        test = extent.createTest("Events Title Exists","Test to verify if the Events Title exists after opening the page");

        test.log(Status.INFO, "Starting Test Case");

        test.log(Status.INFO, "Checking If the URL points to the events page else navigate to that");

        Assert.assertEquals(true,singleEventsPage.findIfEventsTitleExists());

        test.log(Status.INFO, "Finished Test Case");

    }

   @Test(dataProvider="getURLS",dataProviderClass=EventsPageTest.class,alwaysRun=true)
        public void verifyIfEventDescriptionExists(String url) throws InterruptedException, IOException {

            driver.get(url);

            test = extent.createTest("Events description Exists","Test to verify if the Events description exists");

            test.log(Status.INFO, "Starting Test Case");

            test.log(Status.INFO, "Checking If the URL points to the events page else navigate to that");
            if(singleEventsPage.getCurrentUrl() != url)
                singleEventsPage.navigateTo(url);

            test.log(Status.INFO, "Checking If the Page Sub Title Exists");
            Assert.assertEquals(true,singleEventsPage.checkIfElementExists(singleEventsPage.getEventDesc()));

            test.log(Status.INFO, "Finished Test Case");

        }


    @AfterTest(alwaysRun = true)
    public void tearDownTest() {
        //close browser
        driver.close();
        driver.quit();
    }

    @AfterSuite
    public void tearDown() {
        extent.flush();
    }

}

1 Ответ

0 голосов
/ 15 февраля 2020

Было бы хорошо, если бы вы могли опубликовать свой код здесь. Вы можете попытаться сохранить их в одном классе как List, а затем передать их другому.

Я не уверен, как работает ваша структура сейчас. Я думаю о чем-то вроде этого. Пожалуйста, оставьте больше кода здесь.

class EventsPageTest {
  public List<T> getAllHref() {
    // return List
  }
}
class SingleEventsPage {
  @Test
  public void someTest () {
    EventsPageTest eventsPageTest = new EventsPageTest();
    List<T> hrefs = eventsPageTest.getAllHref();
  }

}

Надеюсь, это поможет

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