Селен Java: несвежее ожидание выпадающего списка - PullRequest
0 голосов
/ 19 апреля 2020

Я делаю следующие шаги в моем тестовом примере 1.Откройте главную страницу 2.Нажмите на одну ссылку, которая открывает новую страницу (вкладка) 3. Данные запроса (Нажмите кнопку «Запрос». Страница перезагружается) 4. Выберите один выпадающий список - «запрос», заполните текстовые данные и нажмите «Сохранить». 5.Закройте эту вкладку 6.На главной странице снова нажмите на ссылку, чтобы открыть эту страницу (вкладку) 7. Запрос некоторых данных (нажмите на кнопку «Запрос». Страница перезагрузится) 8. Выберите один выпадающий список - «ответ», заполните некоторые данные и нажмите «Сохранить».

Я получаю ошибку на шаге 8 при выборе раскрывающегося списка "Ответ". Тот же выпадающий при выборе «запрос» работал нормально. Также я могу выбрать «ответ», если открою страницу только один раз (исключая шаги - 3,4,5). Что здесь происходит? Я новичок в селене и попробовал почти все решения, доступные для устаревшего исключения. Тот же код работает в моей системе коллег без проблем. (та же самая версия chrome) Я также попытался дать время сна. Кроме того, во время выполнения он расширяет раскрывающийся список, и я мог видеть «ответ», но все же он не выбирает ответ.

Это мои фрагменты кода. Использование браузера chrome.

************************ Testcase ******************************
public class TC_004 extends BaseClass{

    @Test
    public void TNRangeConfirm() throws InterruptedException{
        driver.get(baseURL);


        LoginUS login=new LoginUS();
        login.loginTest();
        Thread.sleep(10000);
        logger.info("Starting Multiline Creation");
        PageActions icp=new PageActions();
        logger.info("Sending request");
        icp.PortReq();
        logger.info("Sending response");
        Thread.sleep(5000);
        icp.PortRes();

        LogoutUS logout=new LogoutUS();
        logger.info("Logging out");
        logout.logoutTest();

    }
}
*********************************************************  


**********************Reusable Action***********************
public class PageActions extends BaseClass{
String currentWindow = driver.getWindowHandle();

MainMenuPage mmp=new MainMenuPage(driver);
ActionsPage ipdP=new ActionsPage(driver);

public void PortReq() throws InterruptedException{


    System.out.println(" Creation Multi Line : Started");
    System.out.println(" Click on Actions page");
        mmp.clickPRRADM();  // It expands the link
        Thread.sleep(1000);

        mmp.clickIPD();  // Opens the page
        Thread.sleep(60000);


        //Switch tab
        //ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
        //driver.switchTo().window(tabs.get(1));
        for (String handle : driver.getWindowHandles()) {
            if (!handle.equals(currentWindow)) {
                driver.switchTo().window(handle);
            }
        }

        //Read Data from Excel 
        //objExcelFile
        MngTestData mtd=new MngTestData();

        try {
            TN1 = mtd.readExcel(filePath, fileName, sheetName, "New_TN");
            TN2 = mtd.readExcel(filePath, fileName, sheetName, "TN1");
            TN3 = mtd.readExcel(filePath, fileName, sheetName, "TN2");

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }



        System.out.println("TN : "+TN);
        ipdP.selectPortType("Request");
        ipdP.setPortNo(TN);
        ipdP.selectOwner(TN1);
        Thread.sleep(10000);
        ipdP.clickQuery();
        Thread.sleep(10000);

        Boolean isPresent = driver.findElements(By.id("INFO_MSD_ID_0")).size() >0 ;

        if((isPresent) && (ipdP.isExist("NO RECORDS FOUND"))){ */
            System.out.println("Multi Line Creation Started");
            ipdP.selectPortAction("Request");
            Thread.sleep(10000);
            ipdP.selectNNSP(TN1);
            Thread.sleep(6000);
            ipdP.selectONSP(TN2);
            Thread.sleep(10000);

            ipdP.clickSave();
            Thread.sleep(30000);

            driver.close();
            driver.switchTo().window(currentWindow);
            Thread.sleep(10000);
    }


public void PortRes() throws InterruptedException{

    String currentWindow = driver.getWindowHandle();

    mmp.clickPRRADM();
    Thread.sleep(1000);
    mmp.clickPRRADM();
    Thread.sleep(5000);
    mmp.clickIPD(); // opens page
    Thread.sleep(30000);

    //Read Data from Excel 
    //objExcelFile
    MngTestData mtd=new MngTestData();

    try {
        TN = mtd.readExcel(filePath, fileName, sheetName, "New_TN");
        onsp = mtd.readExcel(filePath, fileName, sheetName,"Old_Network");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    //Create Response
    System.out.println("Response Started");

    //Switch tab
    ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
        driver.switchTo().window(tabs.get(1));

    waitUntil wt= new waitUntil();

    boolean isFound=wt.waitForElement(driver, By.id("select-REC_TYPE_ID"));
        System.out.println("isFound"+isFound);

    wt.waitTillDropdownElementLoads(By.id("select-REC_TYPE_ID"), "Request");


    wt.waitTillListOfElementsVisibility(By.id("QRY_NUM_ID"));
    Thread.sleep(40000);


    ipdP.setPortNo(TN);
    wt.waitTillDropdownElementLoads(By.id("select-QRY_OWNER_ID"), owner);
    ipdP.selectOwner(owner);
    Thread.sleep(10000);
    ipdP.clickQuery();
    Thread.sleep(40000);




        ipdP.selectMultiPortAction("Response");  // My code fails at this point stale excecption.
        Thread.sleep(10000);

    driver.close();
    driver.switchTo().window(currentWindow);
    Thread.sleep(10000);

}

}

************************************************************************************




***********************************PageObject class ********************************

public class ActionsPage {
    WebDriver ldriver;

    public ActionsPage (WebDriver rdriver){
        ldriver=rdriver;
        PageFactory.initElements(rdriver,this);

    }

@FindBy(id="select-DETAILS_ACTION_ID")
    @CacheLookup
    WebElement selAction;


public void selectPortAction(String action){
        Select portAction = new Select(selAction);
        portAction.selectByValue(action);
    }


******************************************************************************************

1 Ответ

0 голосов
/ 20 апреля 2020

Я закомментировал @CacheLookup, и он начал работать без проблем. Но я не знаю, в чем причина этого.

В классе PageObject закомментируйте @CacheLookup, и это решило мою ошибку.

@FindBy(id="select-DETAILS_ACTION_ID")
//@CacheLookup
WebElement selAction;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...