2015-02-12 4 views
-1

В моем проекте я попытался автоматизировать создание нового сотрудника, для этого мне нужно щелкнуть ссылку, которая откроет дочернее окно из главного окна и в этом дочернем мне нужно щелкнуть по кнопке поиска, чтобы выбрать диспетчер отчетов для этого сотрудника. После нажатия этого поиска im получаю новое окно внука, которое содержит список имен менеджеров, чтобы я мог выбрать один из них.Не удалось обработать недавно открытое окно GrandChild (Lookup) из дочернего окна

Ниже приведен код, который я использовал для перемещения между окнами,

// Переход от родителя к ребенку

String parentWindow = driver.getWindowHandle(); 

    Set<String> windowHandles = driver.getWindowHandles();  

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

    windowHandles.remove(parentWindow); 

    driver.switchTo().window((String) windowHandles.toArray()[0]); 

    // Click lookup to emulate Grandchild window 
    driver.findElement(..) 

    //From child to grandchild 

    Set<String> grandChild_Child_ParentHandles=driver.getWindowHandles(); 

    grandChild_Child_ParentHandles.remove(parentWindow); 
    grandChild_Child_ParentHandles.remove(windowHandles); 

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

    driver.switchTo().window((String) grandChild_Child_ParentHandles.toArray()[0]); 

    System.out.println(driver.getTitle()); 

Мой код работает до нажатия этой поиск, после того, что мой код перестал выполнить. И код запускается снова, если и только я закрыл окно Grandchild вручную. Мне интересно, почему это происходит.

Просьба помочь!

Спасибо заранее, Шив

+0

Я задаюсь ли окно внучат вы говорите, это Infact новое окно или Javascript оповещения, основываясь на утверждении, что ваш код остановился, чтобы выполнить, когда откроется окно внучат, а код возобновляется, когда его закрыто. Попробуйте одно. Поместите код 'System.out.println (« Всего окон: »+ driver.getWindowHandles(). Size());' после кода, который открывает внук. Дайте мне знать, что он возвращает. – Subh

+0

Привет, Спасибо за быстрый ответ. Я попытался разместить ur-код после того, как откроется окно внука, как я упоминал ранее, общее количество окон отображается только после того, как я закрыл окно внука. И я уже пробовал разместить ниже код дескриптора, который также не работает. Alert aler = driver.switchTo(). Alert(); System.out.println (aler.getText()); и im получают «нуль» в качестве текста предупреждения после закрытия окна Grandchild. –

+0

Можете добавить скриншот, как выглядит окно внучка? Вы можете загрузить [изображение в imgur] (http://imgur.com/) и добавить ссылку сюда для справки. – Subh

ответ

0

Я столкнулся с этой проблемой, потому что окна модальных, который может быть решены с помощью Мульти концепции поточной. Обычно после вызова модального окна он блокирует родительское окно, а это означает, что мы не можем переместить наш драйвер в новое дочернее окно. Поэтому после того, как модальное окно вызвало наш код, перестает работать.

Попробуйте ссылаться на приведенный ниже пример кода для многопоточности, который я нашел в сети.

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.support.ui.ExpectedCondition; 
import org.openqa.selenium.support.ui.WebDriverWait; 

class NewThread implements Runnable { 
static WebDriver driver = new FirefoxDriver(); 
Thread t; 

NewThread() { 
try { 
Thread.sleep(10000); 
} catch (InterruptedException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 

// Create a new, second thread 
t = new Thread(this, "Demo Thread"); 
System.out.println("Child thread: " + t); 
// Start the thread 
t.start(); 
} 

// This is the entry point for the second thread. 
public void run() { 
try { 

System.out.println("This thread has got the control now"); 
Thread.sleep(5000); 

} catch (InterruptedException e) { 
System.out.println("Child interrupted."); 
} 

for (String handle : driver.getWindowHandles()) { 
driver.switchTo().window(handle); 
} 

String nextHandle = driver.getWindowHandle(); 
System.out.println("nextHnadle" + nextHandle); 

try { 
Thread.sleep(4000); 
} catch (InterruptedException e1) { 
// TODO Auto-generated catch block 
e1.printStackTrace(); 
} 

driver.findElement(By.id("foo")).clear(); 
driver.findElement(By.id("foo")).sendKeys("4"); 
try { 
Thread.sleep(2000); 
} catch (InterruptedException e1) { 
// TODO Auto-generated catch block 
e1.printStackTrace(); 
} 

driver.findElement(By.linkText("link")).click(); 
try { 
Thread.sleep(4000); 
} catch (InterruptedException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 

driver.quit(); 
System.out.println("Exiting child thread."); 
} 

// execution will start from here 
public static void main(String args[]) throws InterruptedException { 
try { 
// open the webpage 
driver.get("https://developer.mozilla.org/samples/domref/showModalDialog.html"); 

// get window handle 
String currenthandle = driver.getWindowHandle(); 
System.out.println("currenthandle" + currenthandle); 

//start a new thread 
new NewThread(); 

// click on the button to open model window dialog 
driver.findElement(By.tagName("input")).click(); 

} catch (Exception e) { 
System.out.println("Main thread interrupted."); 
} 
System.out.println("Main thread exiting."); 
} 

} 

 Смежные вопросы

  • Нет связанных вопросов^_^