В настоящее время я автоматизирую тестовые наборы селена для веб-приложения, которое было перенесено с простого 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();
}
}
}