Selenium Wait Проблемы при тестировании приложений ember js - PullRequest
0 голосов
/ 27 июня 2018

В настоящее время я автоматизирую тестовые наборы селена для веб-приложения, которое было перенесено с простого jsp с помощью javascript на ember js framework.

В старом приложении было iframes , а в написанных тестовых сценариях использовался метод селена для frametobeavailableandswitch метода переключения iframe , и он работал правильно. Также для ожидания страницы приложений загрузите testcases используется для проверки document.readyState с использованием JavascriptExecutor после каждого действия для подтверждения загрузки страницы и всех элементов.

Новое приложение также использует iframes, но метод frametobeavailableandswitch selenium не работает должным образом. Переключатель iframe выполняется, но не ожидает загрузки содержимого в iframe. Следующий элемент i щелчок после переключения на фрейм не получается.
Кроме того, document.readyState возвращается как завершенный до того, как страница полностью загрузится.

Я не могу предоставить приложение как локально устанавливаемое приложение сервера Tomcat.

Кто-нибудь сталкивался с подобными проблемами при автоматизации приложения ember js с помощью java selenium.

Пожалуйста, предоставьте любые идеи для этой проблемы. Я тестирую их, используя селен 3 Java и chromedriver в Windows.

Пример кода:

public class IframeSwitchAndWaitProblem {

public static void main(String args[])
{

    System.setProperty("webdriver.chrome.driver", "e:\\chromedriver.exe");

    ChromeDriver driver =new ChromeDriver();

    driver.manage().window().maximize();

    driver.get("http://localhost:9090");        // login page

    driver.findElementById("name").sendKeys("username");  //username textbox

    driver.findElementById("password").sendKeys("password"); //password textbox

    driver.findElementById("login").click(); //login button

    waitForPageLoad(driver); //wait for page load to complete -this line fails returning complete quickly- happens most of the time only in ember js app

    try
    {

        driver.findElement(By.partialLinkText("App1")).click(); //link to page containing an iframe that loads another ember js application inside it -fails because of page load wait problem

    }
    catch(Exception exception)
    {
        exception.printStackTrace();
    }


    sleep(10000);//sleep for 10 seconds.page is loaded completely.

    driver.findElement(By.partialLinkText("App1")).click(); //link to page containing an iframe that loads another ember js application inside it -

    switchFrame(driver,"iframe1"); // frame switch happens but the contents of the frame have not been loaded - the frame contains another ember js application

    try
    {

        driver.findElementByLinkText("SettingsPage").click();// this click fails because of the frame not yet loaded problem

    }
    catch(Exception exception)
    {
        exception.printStackTrace();
    }

    sleep(10000);//sleep for 10 seconds

    driver.findElementByLinkText("SettingsPage").click();// this click works after waiting for 10 seconds


}


public static void sleep(long milliSeconds)
{
    try
    {
        Thread.sleep(milliSeconds); 
    }
    catch(Exception exception)
    {
        exception.printStackTrace();
    }
}

public static void waitForPageLoad(ChromeDriver driver)
{
    JavascriptExecutor executor=(JavascriptExecutor) driver;

    long startTime=System.currentTimeMillis();

    long timeout=10000;

    String readyState="";

    while((System.currentTimeMillis()-startTime) < timeout)
    {
        readyState=(String)executor.executeScript("return document.readyState");

        if(readyState.equals("complete"))
        {
            break;
        }

        sleep(1000);
    }

}



public static void switchFrame(ChromeDriver driver,String frameid)
{

    WebDriverWait frameWait=new WebDriverWait(driver,25);

    try
    {
        frameWait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id(frameid)));
    }
    catch(Exception exception)
    {
        exception.printStackTrace();
    }

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