0

Voici mon scénario:Télécharger un fichier Excel sur la grille de sélénium et de le lire

nous courons notre suite de tests de sélénium sur la grille de sélénium qui a été installé dans des conteneurs docker (boîte linux) de jenkins.

Dans un de mes tests lorsque je clique sur l'option d'exportation, il télécharge un fichier Excel sur la grille de sélénium.

Problème:

Je ne peux pas trouver l'emplacement du fichier téléchargé (test à chaque fois peut fonctionner dans différents noeuds dans la grille de sélénium).

ce que je me attends:

quelqu'un peut me aider, comment trouver l'emplacement du fichier et je pense que je ne peux pas ouvrir un fichier Excel dans la boîte de linux, donc si je peux déplacer ce fichier à l'un des Emplacement SFTP puis je peux me connecter à SFTP et peut lire le contenu dedans pour la validation.

Merci

Répondre

0

Hypothèses:

  • Puisque vous avez mentionné que vous utilisez Docker et puisqu'il n'y a actuellement aucune image Docker soit pour Windows (ou) OSX, votre navigateur est soit Chrome ou Firefox
  • Vous utilisez une technique telle que this pour configurer l'emplacement de téléchargement par défaut de votre navigateur Chrome ou Firefox.

Vous devez d'abord déterminer à quel noeud votre grille a acheminé l'exécution de votre test. Pour ce faire, vous emploierez une technique telle que ci-dessous pour récupérer cette information (j'ai d'abord publié cela comme un here, puis écrit un blog sur ce here et finalement construit une bibliothèque appelée talk2Grid qui fournit cette capacité hors de la boîte sans vous avoir à écrire une quantité de code supplémentaire)

public class GridInfoExtracter { 

private static String[] getHostNameAndPort(String hostName, int port, 
    SessionId session) { 
    String[] hostAndPort = new String[2]; 
    String errorMsg = "Failed to acquire remote webdriver node and port info. Root cause: "; 

    try { 
    HttpHost host = new HttpHost(hostName, port); 
    DefaultHttpClient client = new DefaultHttpClient(); 
    URL sessionURL = new URL("http://" + hostName + ":" + port + "/grid/api/testsession?session=" + session); 
    BasicHttpEntityEnclosingRequest r = new BasicHttpEntityEnclosingRequest("POST", sessionURL.toExternalForm()); 
    HttpResponse response = client.execute(host, r); 
    JSONObject object = extractObject(response); 
    URL myURL = new URL(object.getString("proxyId")); 
    if ((myURL.getHost() != null) && (myURL.getPort() != -1)) { 
    hostAndPort[0] = myURL.getHost(); 
    hostAndPort[1] = Integer.toString(myURL.getPort()); 
    } 
    } catch (Exception e) { 
    logger.log(Level.SEVERE, errorMsg, e); 
    throw new RuntimeException(errorMsg, e); 
    } 
    return hostAndPort; 
} 

private static JSONObject extractObject(HttpResponse resp) throws IOException, JSONException { 
    BufferedReader rd = new BufferedReader(new InputStreamReader(resp.getEntity().getContent())); 
    StringBuffer s = new StringBuffer(); 
    String line; 
    while ((line = rd.readLine()) != null) { 
    s.append(line); 
    } 
    rd.close(); 
    JSONObject objToReturn = new JSONObject(s.toString()); 
    return objToReturn; 
} 
} 

maintenant, vous auriez les informations IP et le port du nœud Docker sur lequel votre test est en cours d'exécution.

Vous avez maintenant deux options:

  1. Vous téléchargez le fichier du conteneur docker en utilisant scp (ou)
  2. Vous créez un servlet personnalisé puis l'injecter dans le noeud comme expliqué here. Ensuite, vous établissez une connexion http à ce nœud en appuyant sur votre servlet, puis téléchargez le fichier sur votre machine locale. L'adresse IP et le port du nœud sont de toute façon disponibles depuis votre session.

Cela devrait vous aider avec ceci. Tout compte fait, vous pouvez également lire this blog que Mark Collins a créé qui explique pourquoi vous ne devriez pas essayer de télécharger des fichiers et si vous en avez besoin, quelle est la bonne façon de le faire.

+0

Merci beaucoup pour l'info. J'ai utilisé le code et trouvé où mon test où était le routage à "Session a8880149-f0f4-4a33-ab5e-8296564ea087 a été acheminé à ** GridNode [IP = '172.17.0.7', Port = 5555] **". Mais je ne pouvais pas savoir exactement où le fichier est téléchargé sur la grille ou sur quel conteneur docker. Toute idée où serait l'emplacement de téléchargement par défaut pour un webdriver distant – nurav

+0

Il n'y a pas d'emplacement par défaut pour le téléchargement du fichier que le webdriver décide. C'est toujours le navigateur qui est par défaut à un endroit. Dans ma réponse, j'ai fourni des liens vers des articles qui vous montrent comment contrôler l'emplacement. Donc, vous pouvez utiliser cela pour forcer le navigateur à télécharger à votre choix d'emplacement et ensuite l'obtenir à partir de là. Si ma réponse m'a aidé, je vous demanderais de bien vouloir l'aider à l'accepter. –