2017-10-13 1 views
0

J'automatise une tâche de bureau pour mon entreprise en utilisant Winium.Desktop. La première étape consiste à faire une connexion et cela ouvre une nouvelle fenêtre. L'étape suivante consiste à remplir un formulaire et parfois la nouvelle fenêtre n'est pas ciblée. L'automatisation continue donc sur la fenêtre actuellement focalisée (ancienne fenêtre de l'automatisation). la recherche sur le web j'ai trouvé ceci:Winium.desktop - Gérer la nouvelle fenêtre de bureau

1: String parentHandle = driver.getWindowHandle(); 
2: for (String handle: driver.getWindowHandles()) { 
3: if (!parentHandle.equals(handle)) 
4:  driver.switchTo().window(handle); 
5: } 

Vous avez une exception: java.lang.ClassCastException: java.lang.Long ne peut pas être jeté à java.lang.String sur la ligne 2

Non Bien sûr, si je peux l'utiliser, mais ce code ci-dessus a été utilisé pour une fenêtre de navigateur et ce n'est pas mon cas.

Comment puis-je me concentrer sur la nouvelle fenêtre de programme?

Merci

Répondre

0

Vous devez fenêtre vous pouvez changer correspondre état ... Voir l'exemple de code

//wait for few seconds for loading site 
    for (String windows : driver.getWindowHandles()) { 

       driver.switchTo().window(windows); 

       if (driver.getCurrentUrl().startsWith("xyz.com")) { 

       //Your Operation 
        } 
       if (driver.getCurrentUrl().startsWith("yzx.com")) { 
    //Your Operation 
        } 


      } 

espère que ça va résoudre votre problème

+0

C'est un programme de bureau auquel l'utilisateur se connecte. Ce n'est pas un navigateur Web. – freitas

+0

oww je pense que le concept sera comme même – zsbappa

0

Je est venu avec une solution temporaire.

public static final <T> T nthElement(Iterable<T> data, int n){ 
    int index = 0; 
    for(T element : data){ 
     if(index == n){ 
      return element; 
     } 
     index++; 
    } 
    return null; 
} 

public static void focusNewWindow() { 
    Object count = nthElement(driver.getWindowHandles(), 0); 
    driver.switchTo().window(count.toString()); 
} 

Chaque fois que j'appelle cette fenêtre dans l'automatisation, elle devient le premier élément d'une liste de fenêtres (interne). J'ai donc fait une fonction pour retourner un élément basé sur l'index et passé 0 au second param.

C'est temporaire car cela fonctionne si vous exécutez l'automatisation sans ouvrir d'autres fenêtres.