{"version":"1.1","schema_version":"1.1.0","plugin_version":"1.1.2","url":"https://tutos-gameserver.fr/2019/05/04/selenium-webdriver-documentation-selenium-serveur-dimpression/","llm_html_url":"https://tutos-gameserver.fr/2019/05/04/selenium-webdriver-documentation-selenium-serveur-dimpression/llm","llm_json_url":"https://tutos-gameserver.fr/2019/05/04/selenium-webdriver-documentation-selenium-serveur-dimpression/llm.json","manifest_url":"https://tutos-gameserver.fr/llm-endpoints-manifest.json","language":"fr-FR","locale":"fr_FR","title":"Selenium WebDriver &#8211; Documentation Selenium\n\n &#8211; Serveur d&rsquo;impression","site":{"name":"Tutos GameServer","url":"https://tutos-gameserver.fr/"},"author":{"id":1,"name":"Titanfall","url":"https://tutos-gameserver.fr/author/titanfall/"},"published_at":"2019-05-04T07:22:22+00:00","modified_at":"2019-05-04T07:22:22+00:00","word_count":8817,"reading_time_seconds":2646,"summary":"REMARQUE: nous travaillons actuellement à la documentation de ces sections. Nous pensons que les informations ici sont exactes, mais sachez que nous travaillons toujours sur ce chapitre. Des informations supplémentaires seront fournies au fur et à mesure, ce qui devrait rendre ce chapitre plus utile. solide. Présentation de WebDriver La principale nouvelle fonctionnalité de Selenium [&hellip;]","summary_points":["REMARQUE: nous travaillons actuellement à la documentation de ces sections.","Nous pensons que les informations ici sont exactes, mais sachez que nous travaillons toujours sur ce\nchapitre.","Des informations supplémentaires seront fournies au fur et à mesure, ce qui devrait rendre ce chapitre plus utile.","solide."],"topics":["Serveur d'impression"],"entities":[],"entities_metadata":[{"id":10,"name":"Serveur d'impression","slug":"serveur-dimpression","taxonomy":"category","count":3907,"url":"https://tutos-gameserver.fr/category/serveur-dimpression/"}],"tags":["Serveur d'impression"],"content_hash":"d0975ca22cb96d3c44163706a94353c3","plain_text":"REMARQUE: nous travaillons actuellement à la documentation de ces sections.\nNous pensons que les informations ici sont exactes, mais sachez que nous travaillons toujours sur ce\nchapitre. Des informations supplémentaires seront fournies au fur et à mesure, ce qui devrait rendre ce chapitre plus utile.\nsolide.\n\nPrésentation de WebDriver\nLa principale nouvelle fonctionnalité de Selenium 2.0 est l&#39;intégration de l&#39;API WebDriver.\nWebDriver est conçu pour fournir une interface de programmation plus simple et plus concise en plus de\nrésoudre certaines limitations de l’API Selenium-RC. Selenium-WebDriver a été développé\npour mieux prendre en charge les pages Web dynamiques où des éléments d&#39;une page peuvent changer sans la page\nlui-même étant rechargé. L’objectif de WebDriver est de fournir une solution orientée objet bien conçue.\nAPI offrant une prise en charge améliorée des problèmes de test d&#39;applications Web avancés et avancés.\n\n\nComment WebDriver &quot;pilote-t-il&quot; le navigateur par rapport à Selenium-RC?\nSelenium-WebDriver appelle directement le navigateur en utilisant le support natif de chaque navigateur pour l’automatisation.\nLa manière dont ces appels directs sont effectués et les fonctionnalités qu’ils prennent en charge dépend du navigateur que vous utilisez.\nDes informations sur chaque ‘pilote de navigateur’ sont fournies plus loin dans ce chapitre.\nPour ceux qui sont familiers avec Selenium-RC, c&#39;est très différent de ce que vous avez l&#39;habitude de faire. Sélénium-RC\nfonctionné de la même manière pour chaque navigateur pris en charge. Il &quot;injecte&quot; des fonctions javascript dans le navigateur\nlorsque le navigateur a été chargé et a ensuite utilisé son javascript pour piloter l’AUT dans le navigateur.\nWebDriver n&#39;utilise pas cette technique. Encore une fois, il pilote le navigateur directement à l&#39;aide de son navigateur.\nsupport intégré pour l&#39;automatisation.\n\n\nWebDriver et le Selenium-Server\nLe serveur Selenium peut être nécessaire ou non, selon l’utilisation que vous envisagez d’utiliser Selenium-WebDriver.\nSi votre navigateur et vos tests s&#39;exécutent tous sur le même ordinateur et que vos tests utilisent uniquement l&#39;API WebDriver,\nalors vous n&#39;avez pas besoin d&#39;exécuter le serveur Selenium; WebDriver exécutera le navigateur directement.\nCependant, il existe certaines raisons d&#39;utiliser Selenium-Server avec Selenium-WebDriver.\n\n\n\nVous utilisez Selenium-Grid pour répartir vos tests sur plusieurs machines ou machines virtuelles (VM).\nVous souhaitez vous connecter à un ordinateur distant doté d&#39;une version de navigateur particulière qui n&#39;est pas activée\nvotre machine actuelle.\nVous n&#39;utilisez pas les liaisons Java (c&#39;est-à-dire Python, C # ou Ruby) et souhaitez utiliser le pilote HtmlUnit\n\n\n\n\n\n\nConfiguration d&#39;un projet Selenium-WebDriver\nInstaller Selenium signifie configurer un projet dans un développement pour pouvoir écrire un programme en utilisant\nSélénium. Cela dépend de votre langage de programmation et de votre environnement de développement.\n\nJava\nLe moyen le plus simple de configurer un projet Java Selenium 2.0 consiste à utiliser Maven. Maven téléchargera le\njava (la bibliothèque du client java Selenium 2.0) et toutes ses dépendances, et créera le\nprojet pour vous, en utilisant un fichier maven pom.xml (configuration du projet). Une fois que vous avez fait cela, vous\npouvez importer le projet maven dans votre IDE préféré, IntelliJ IDEA ou Eclipse.\nCommencez par créer un dossier contenant vos fichiers de projet Selenium. Ensuite, pour utiliser Maven, vous avez besoin d’un\nfichier pom.xml. Cela peut être créé avec un éditeur de texte. Nous n’enseignerons pas le\ndes détails sur les fichiers pom.xml ou sur l&#39;utilisation de Maven car il existe déjà d&#39;excellentes références à ce sujet.\nVotre fichier pom.xml ressemblera à ceci. Créez ce fichier dans le dossier que vous avez créé pour\nvotre projet.\n\n\n\n&lt;projet xmlns =&quot;http://maven.apache.org/POM/4.0.0&quot;\n                 xmlns: xsi =&quot;http://www.w3.org/2001/XMLSchema-instance&quot;\n                 xsi: schemaLocation =&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&gt;\n        4.0.0\n        MySel20Proj\n        MySel20Proj\n        1,0\n        \n            \n                org.seleniumhq.selenium\n                sélénium-serveur\n                3.0.1\n            \n        \n\n\n\n\nAssurez-vous de spécifier la version la plus récente. Au moment de la rédaction, la version indiquée ci-dessus était\nles plus courants, cependant, des rejets fréquents ont eu lieu immédiatement après la publication de Selenium 2.0.\nConsultez la page de téléchargement de Maven pour connaître la version actuelle et éditez la dépendance ci-dessus en conséquence.\nMaintenant, à partir d&#39;une ligne de commande, CD dans le répertoire du projet et exécutez maven comme suit.\nCela téléchargera Selenium et toutes ses dépendances et les ajoutera au projet.\nEnfin, importez le projet dans votre environnement de développement préféré. Pour ceux qui ne connaissent pas\navec cela, nous avons fourni une annexe qui montre cela.\nImporter un projet maven dans IntelliJ IDEA.\nImporter un projet maven dans Eclipse.\n\n\nC #\nA partir de Selenium 2.2.0, les liaisons C # sont distribuées sous la forme d’un ensemble de dll signées avec d’autres\ndépendance dlls. Avant la version 2.2.0, toutes les dll de Selenium n’étaient pas signées.\nPour inclure Selenium dans votre projet, téléchargez simplement la dernière\nfichier zip sélénium-dotnet de http://selenium-release.storage.googleapis.com/index.html.\nSi vous utilisez Windows Vista ou supérieur, vous devez débloquer le fichier zip avant\nDécompressez-le: Faites un clic droit sur le fichier zip, cliquez sur «Propriétés», cliquez sur «Débloquer»\net cliquez sur “OK”.\nDécompressez le contenu du fichier zip et ajoutez une référence à chacun des fichiers décompressés.\nDLL à votre projet dans Visual Studio (ou votre IDE de choix).\nPaquets officiels NuGet:\nRC\nWebDriver\nWebDriverBackedSelenium\nSoutien\n\n\nPython\nSi vous utilisez Python pour l’automatisation des tests, vous êtes probablement déjà familiarisé avec le développement.\nen Python. Pour ajouter Selenium à votre environnement Python, exécutez la commande suivante à partir de\nune ligne de commande.\nPip nécessite l&#39;installation de pip. Pip a également une dépendance.\nsur setuptools.\nL’enseignement du développement Python lui-même dépasse le cadre de ce document, mais il existe de nombreux\nLes ressources sur Python et les développeurs potentiels de votre organisation peuvent vous aider à vous mettre à niveau.\n\n\nRubis\nSi vous utilisez Ruby pour l’automatisation des tests, vous êtes probablement déjà familiarisé avec le développement.\nen rubis. Pour ajouter Selenium à votre environnement Ruby, exécutez la commande suivante à partir de\nune ligne de commande.\n\n\nbijou installer sélénium-webdriver\n\n\n\nL’enseignement du développement de Ruby lui-même dépasse le cadre de ce document, mais il existe de nombreuses\nLes ressources sur Ruby et les développeurs potentiels de votre organisation peuvent vous aider à vous mettre à niveau.\n\n\nPerl\nLes liaisons Perl sont fournies par des tiers. Veuillez vous reporter à la documentation correspondante pour savoir comment\ninstaller / commencer. Il existe une liaison Perl connue à ce jour.\n\n\nJavaScript\nSi vous utilisez node.js pour développer votre application, le projet sélénium fournit des liaisons Javascript sur npm.\nInstallez les liaisons Javascript avec npm:\n\n\nnpm installer sélénium-webdriver\n\n\n\nVous pouvez trouver la documentation de l&#39;API ici.\n\n\n\nMigration de Selenium 1.0\nPour ceux qui ont déjà écrit des suites de tests en utilisant Selenium 1.0, nous avons fourni des conseils sur la façon de\nmigrez votre code existant vers Selenium 2.0. Simon Stewart, développeur principal de Selenium 2.0,\na écrit un article sur la migration de Selenium 1.0. Nous avons inclus cela en annexe.\nMigration de Selenium RC vers Selenium WebDriver\n\n\nPrésentation de l&#39;API Selenium-WebDriver par exemple\nWebDriver est un outil permettant d’automatiser le test d’applications Web, en particulier\npour vérifier qu&#39;ils fonctionnent comme prévu. Son objectif est de fournir une API conviviale\nfacile à explorer et à comprendre, plus facile à utiliser que l&#39;API Selenium-RC (1.0),\nce qui aidera à rendre vos tests plus faciles à\nlire et maintenir. Il n’est lié à aucun cadre de test particulier, il peut donc\nêtre utilisé aussi bien dans un projet de test unitaire ou à partir d’une ancienne méthode «principale».\nCette section présente l’API de WebDriver et vous aide à commencer à devenir\nfamilier avec elle. Commencez par configurer un projet WebDriver si vous ne l’avez pas déjà fait.\nCeci a été décrit dans la section précédente, Configuration d&#39;un projet Selenium-WebDriver.\nUne fois votre projet configuré, vous pouvez voir que WebDriver agit comme n&#39;importe quelle bibliothèque normale:\nentièrement autonome, et vous n’avez généralement pas besoin de vous souvenir de commencer\nprocessus supplémentaires ou exécuter les programmes d&#39;installation avant de l&#39;utiliser, par opposition au serveur proxy\navec Selenium-RC.\nRemarque: des étapes supplémentaires sont nécessaires pour utiliser ChromeDriver, Opera Driver, Android Driver.\net pilote iOS\nVous êtes maintenant prêt à écrire du code. Voici un moyen facile de commencer\nexemple, qui recherche le terme &quot;Fromage&quot; sur Google, puis affiche le\ntitre de la page de résultats sur la console.\n\n\npaquet org.openqa.selenium.example;\n\nimportation org.openqa.selenium.By;\nimportation org.openqa.selenium.WebDriver;\nimportation org.openqa.selenium.WebElement;\nimportation org.openqa.selenium.firefox.FirefoxDriver;\nimportation org.openqa.selenium.support.ui.ExpectedCondition;\nimportation org.openqa.selenium.support.ui.WebDriverWait;\n\nPublique classe Selenium2Example  \n    Publique statique vide principale(Chaîne[] args) \n        // Créer une nouvelle instance du pilote Firefox\n        // Notez que le reste du code repose sur l&#39;interface, \n        // pas la mise en œuvre.\n        WebDriver chauffeur = Nouveau FirefoxDriver();\n\n        // Et maintenant, utilisez ceci pour visiter Google\n        chauffeur.obtenir(&quot;http://www.google.com&quot;)\n        // Alternativement, la même chose peut être faite comme ça\n        // driver.navigate (). to (&quot;http://www.google.com&quot;);\n\n        // Trouver l&#39;élément de saisie de texte par son nom\n        WebElement élément = chauffeur.findElement(Par.prénom(&quot;q&quot;));\n\n        // Entrez quelque chose à rechercher\n        élément.sendKeys(&quot;Fromage!&quot;)\n\n        // Soumettez maintenant le formulaire. WebDriver trouvera la forme pour nous à partir de l&#39;élément\n        élément.soumettre();\n\n        // Vérifier le titre de la page\n        Système.en dehors.imprimer(&quot;Le titre de la page est:&quot; + chauffeur.getTitle());\n        \n        // La recherche de Google est rendue dynamiquement avec JavaScript.\n        // Attend le chargement de la page, délai d&#39;expiration après 10 secondes\n        (Nouveau WebDriverWait(chauffeur, dix)).jusqu&#39;à ce que(Nouveau Condition attendue&lt;Booléen&gt; () \n            Publique Booléen appliquer(WebDriver ré) \n                revenir ré.getTitle()toLowerCase()commence avec(&quot;fromage!&quot;)\n            \n        );\n\n        // devrait voir: &quot;cheese! - Google Search&quot;\n        Système.en dehors.imprimer(&quot;Le titre de la page est:&quot; + chauffeur.getTitle());\n        \n        // Fermer le navigateur\n        chauffeur.quitter();\n    \n\n\n\n\n\n\nen utilisant OpenQA.Selenium;\nen utilisant OpenQA.Selenium.Firefox;\n\n// Requiert une référence à WebDriver.Support.dll\nen utilisant OpenQA.Selenium.Support.UI;\n\nclasse GoogleSuggest\n\n    statique vide Principale(chaîne[] args)\n    \n        // Crée une nouvelle instance du pilote Firefox.\n        // Notez qu&#39;il est encapsulé dans une clause using afin que le navigateur soit fermé \n        // et le WebDriver est disposé (même face aux exceptions).\n\n        // Notez également que le reste du code repose sur l&#39;interface, \n        // pas la mise en œuvre.\n\n        // Notez également que d&#39;autres pilotes (InternetExplorerDriver,\n        // ChromeDriver, etc.) nécessitera une configuration supplémentaire \n        // avant que cet exemple fonctionne. Voir les pages wiki pour le\n        // pilotes individuels sur http://code.google.com/p/selenium/wiki\n        // pour plus d&#39;informations.\n        en utilisant (IWebDriver chauffeur = Nouveau FirefoxDriver())\n        \n            // Remarque la navigation est légèrement différente de la version Java\n            // C&#39;est parce que &#39;get&#39; est un mot clé en C #\n            chauffeur.Naviguer()GoToUrl(&quot;http://www.google.com/&quot;)\n    \n            // Trouver l&#39;élément de saisie de texte par son nom\n            IWebElement question = chauffeur.FindElement(Par.prénom(&quot;q&quot;));\n    \n            // Entrez quelque chose à rechercher\n            question.SendKeys(&quot;Fromage&quot;)\n    \n            // Soumettez maintenant le formulaire. WebDriver trouvera la forme pour nous à partir de l&#39;élément\n            question.Soumettre();\n    \n            // La recherche de Google est rendue dynamiquement avec JavaScript.\n            // Attend le chargement de la page, délai d&#39;expiration après 10 secondes\n            var attendre = Nouveau WebDriverWait(chauffeur, TimeSpan.À partir de secondes(dix));\n            attendre.Jusqu&#39;à ce que(ré =&gt; ré.Titre.Commence avec(&quot;fromage&quot;, Comparaison de chaînes.OrdinalIgnoreCase));\n    \n            // devrait voir: &quot;Cheese - Google Search&quot; (pour une locale anglaise)\n            Console.WriteLine(&quot;Le titre de la page est:&quot; + chauffeur.Titre)\n        \n    \n\n\n\n\n\n\nde sélénium importation webdriver\nde sélénium.common.exceptions importation TimeoutException\nde selenium.webdriver.support.ui importation WebDriverWait # disponible depuis 2.4.0\nde selenium.webdriver.support importation conditions_attendues comme CE # disponible depuis 2.26.0\n\n# Créer une nouvelle instance du pilote Firefox\nchauffeur = webdriver.Firefox()\n\n# aller à la page d&#39;accueil de google\nchauffeur.obtenir(&quot;http://www.google.com&quot;)\n\n# la page est ajaxy donc le titre est à l&#39;origine ceci:\nimpression chauffeur.Titre\n\n# trouve que l&#39;attribut name est q (le champ de recherche google)\ninputElement = chauffeur.find_element_by_name(&quot;q&quot;)\n\n# tapez dans la recherche\ninputElement.send_keys(&quot;fromage!&quot;)\n\n# soumettre le formulaire (bien que google recherche automatiquement maintenant sans soumettre)\ninputElement.soumettre()\n\nessayer:\n    # nous devons attendre que la page se rafraîchit, la dernière chose qui semble avoir été mise à jour est le titre\n    WebDriverWait(chauffeur, dix).jusqu&#39;à ce que(CE.title_contains(&quot;fromage!&quot;))\n\n    # Vous devriez voir &quot;fromage! - Recherche Google&quot;\n    impression chauffeur.Titre\n\nenfin:\n    chauffeur.quitter()\n\n\n\n\n\nexiger &#39;rubygems&#39;\nexiger &#39;sélénium-webdriver&#39;\n\nchauffeur = Sélénium::WebDriver.pour : firefox\nchauffeur.obtenir &quot;http://google.com&quot;\n\nélément = chauffeur.find_element :prénom =&gt; &quot;q&quot;\nélément.send_keys &quot;Fromage!&quot;\nélément.soumettre\n\nmet &quot;Le titre de la page est #driver.title &quot;\n\nattendre = Sélénium::WebDriver::Attendre.Nouveau(:temps libre =&gt; dix)\nattendre.jusqu&#39;à ce que  chauffeur.Titre.downcase.Commencer avec? &quot;fromage!&quot; \n\nmet &quot;Le titre de la page est #driver.title &quot;\nchauffeur.quitter\n\n\n\n\n\nvar chauffeur = Nouveau webdriver.Constructeur()construire();\nchauffeur.obtenir(&quot;http://www.google.com&quot;)\n\nvar élément = chauffeur.findElement(webdriver.Par.prénom(&#39;q&#39;));\nélément.sendKeys(&#39;Fromage!&#39;)\nélément.soumettre();\n\nchauffeur.getTitle()puis(une fonction(Titre) \n  console.bûche(&#39;Le titre de la page est:&#39; + Titre)\n);\n\nchauffeur.attendre(une fonction() \n  revenir chauffeur.getTitle()puis(une fonction(Titre) \n    revenir Titre.toLowerCase()lastIndexOf(&#39;fromage!&#39;, 0) === 0;\n  );\n, 3000)\n\nchauffeur.getTitle()puis(une fonction(Titre) \n  console.bûche(&#39;Le titre de la page est:&#39; + Titre)\n);\n\nchauffeur.quitter();\n\n\n\n\n\nutilisation Sélénium :: Télécommande :: Pilote;\n\n# Créer une nouvelle instance du pilote\nmon conducteur $ = Sélénium :: Télécommande :: Pilote-&gt;Nouveau;\n\n# Aller à la page d&#39;accueil de Google\nconducteur $-&gt;obtenir(&quot;http://www.google.com&quot;)\n\n# Imprimer le titre de la page d&#39;origine\nmon $ title = conducteur $-&gt;get_title();\nimpression &quot;$ title  n&quot;;\n\n# Trouver l&#39;élément dont l&#39;attribut name est q (champ de recherche Google)\nmon $ inputElement = conducteur $-&gt;find_element(&quot;q&quot;, &quot;prénom&quot;)\n\n# tapez dans la recherche\n$ inputElement-&gt;send_keys(&quot;fromage!&quot;)\n\n# soumettre le formulaire (bien que google recherche automatiquement maintenant sans soumettre)\n$ inputElement-&gt;soumettre();\n\n# Définissez le délai d&#39;expiration de la recherche d&#39;éléments sur 10 secondes (0 par défaut)\nconducteur $-&gt;set_implicit_wait_timeout(10000)\n# puis utilisez XPath pour rechercher un titre de page contenant du fromage!\nconducteur $-&gt;find_element(&quot;/ html / head / title[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'cheese!')]&quot;)\n\n# Vous devriez voir &quot;fromage! - Recherche Google&quot;\n$ title = conducteur $-&gt;get_title();\nimpression &quot;$ title  n&quot;;\n\nconducteur $-&gt;quitter();\n\n\n\nDans les prochaines sections, vous en apprendrez plus sur l’utilisation de WebDriver pour des applications\ntelles que la navigation en avant et en arrière dans l’historique de votre navigateur, et comment\ntester des sites Web qui utilisent des cadres et des fenêtres. Nous fournissons également un plus\ndiscussions approfondies et exemples.\n\n\nCommandes et opérations de l&#39;API Selenium-WebDriver\n\nAller chercher une page\nLa première chose que vous souhaiterez probablement faire avec WebDriver est d’accéder à une page.\nLa façon habituelle de faire ceci est d&#39;appeler “get”:\n\n\nchauffeur.obtenir(&quot;http://www.google.com&quot;)\n\n\n\n\n\nchauffeur.URL = &quot;http://www.google.com&quot;;\n\n\n\n\n\nchauffeur.obtenir &quot;http://www.google.com&quot;\n\n\n\n\n\nchauffeur.obtenir(&quot;http://www.google.com&quot;)\n\n\n\n\n\nconducteur $-&gt;obtenir(&quot;http://www.google.com&quot;)\n\n\n\n\n\nchauffeur.obtenir(&quot;http://www.google.com&quot;)\n\n\n\nDépend de plusieurs facteurs, y compris la combinaison système d&#39;exploitation / navigateur,\nWebDriver peut attendre ou ne pas attendre le chargement de la page. Dans certaines circonstances,\nWebDriver peut rendre le contrôle avant que le chargement de la page soit terminé ou même commencé.\nPour assurer la robustesse, vous devez attendre que le ou les éléments existent dans la page à l&#39;aide de\nAttentes explicites et implicites.\n\n\nLocalisation d&#39;éléments d&#39;interface utilisateur (WebElements)\nLa localisation d&#39;éléments dans WebDriver peut être effectuée sur l&#39;instance WebDriver elle-même ou sur un WebElement.\nChacune des liaisons de langue expose une méthode «Trouver élément» et «Trouver des éléments». L&#39;ancien retour\nun objet WebElement correspondant à la requête et lève une exception si un tel élément est introuvable.\nCe dernier renvoie une liste de WebElements, éventuellement vide si aucun élément DOM ne correspond à la requête.\nLes méthodes &quot;Rechercher&quot; prennent un objet de requête ou de localisateur appelé &quot;Par&quot;. Les stratégies «par» sont énumérées ci-dessous.\n\nPar ID\nC&#39;est le moyen le plus efficace et préféré de localiser un élément. Pièges courants que les développeurs d&#39;interface utilisateur\nmake est d&#39;avoir des identifiants non uniques sur une page ou de générer automatiquement l&#39;identifiant, les deux doivent être évités. Une classe\nsur un élément html est plus approprié qu&#39;un identifiant généré automatiquement.\nExemple de recherche d&#39;un élément ressemblant à ceci:\n\n\n&lt;div identifiant=&quot;coolestWidgetEvah&quot;&gt;...&lt;/div&gt;\n\n\n\n\n\nWebElement élément = chauffeur.findElement(Par.identifiant(&quot;coolestWidgetEvah&quot;));\n\n\n\n\n\nIWebElement élément = chauffeur.FindElement(Par.Id(&quot;coolestWidgetEvah&quot;));\n\n\n\n\n\nélément = chauffeur.find_element(: id, &quot;coolestWidgetEvah&quot;)\n\n\n\n\n\nélément = chauffeur.find_element_by_id(&quot;coolestWidgetEvah&quot;)\n\nou\n\nde selenium.webdriver.common.by importation Par\nélément = chauffeur.find_element(par=Par.ID, valeur=&quot;coolestWidgetEvah&quot;)\n\n\n\n\n\nélément $ = conducteur $-&gt;find_element(&#39;coolestWidgetEvah&#39;,&#39;id&#39;)\n\n\n\n\n\nvar élément = chauffeur.findElement(Par.identifiant(&#39;coolestWidgetEvah&#39;));\n\n\n\n\n\nPar nom de classe\n“Classe” dans ce cas fait référence à l&#39;attribut sur l&#39;élément DOM. Souvent, dans la pratique, il y a\nde nombreux éléments DOM avec le même nom de classe, la recherche de plusieurs éléments devient alors la solution la plus pratique.\noption sur la recherche du premier élément.\nExemple de recherche d&#39;un élément ressemblant à ceci:\n\n\n&lt;div classe=&quot;fromage&quot;&gt; &lt;envergure&gt;Cheddar&lt;/envergure&gt; &lt;/div&gt; &lt;div classe=&quot;fromage&quot;&gt; &lt;envergure&gt;Gouda&lt;/envergure&gt; &lt;/div&gt;\n\n\n\n\n\nliste&lt;WebElement&gt; les fromages = chauffeur.findElements(Par.nom du cours(&quot;fromage&quot;));\n\n\n\n\n\nIListe&lt;IWebElement&gt; les fromages = chauffeur.FindElements(Par.Nom du cours(&quot;fromage&quot;));\n\n\n\n\n\nles fromages = chauffeur.find_elements(:nom du cours, &quot;fromage&quot;)\n\nou\n\nles fromages = chauffeur.find_elements(:classe, &quot;fromage&quot;)\n\n\n\n\n\nles fromages = chauffeur.find_elements_by_class_name(&quot;fromage&quot;)\n\nou\n\nde selenium.webdriver.common.by importation Par\nles fromages = chauffeur.find_elements(Par.NOM DU COURS, &quot;fromage&quot;)\n\n\n\n\n\n@les fromages = conducteur $-&gt;find_elements(&#39;fromage&#39;, &#39;classe&#39;)\n\n\n\n\n\nchauffeur.findElements(Par.nom du cours(&quot;fromage&quot;))\n.puis(les fromages =&gt; console.bûche(les fromages.longueur));\n\n\n\n\n\nPar nom de tag\nLe nom de la balise DOM de l&#39;élément.\nExemple de recherche d&#39;un élément ressemblant à ceci:\n\n\n&lt;iframe src=&quot;...&quot;&gt; &lt;/iframe&gt;\n\n\n\n\n\nWebElement Cadre = chauffeur.findElement(Par.tagName(&quot;iframe&quot;));\n\n\n\n\n\nIWebElement Cadre = chauffeur.FindElement(Par.TagName(&quot;iframe&quot;));\n\n\n\n\n\nCadre = chauffeur.find_element(: tag_name, &quot;iframe&quot;)\n\n\n\n\n\nCadre = chauffeur.find_element_by_tag_name(&quot;iframe&quot;)\n\nou\n\nde selenium.webdriver.common.by importation Par\nCadre = chauffeur.find_element(Par.TAG_NAME, &quot;iframe&quot;)\n\n\n\n\n\n$ frame = conducteur $-&gt;find_element(&#39;iframe&#39;, &#39;tag_name&#39;)\n\n\n\n\n\nvar Cadre = chauffeur.findElement(Par.tagName(&#39;iframe&#39;));\n\n\n\n\n\nDe nom\nRecherchez l&#39;élément d&#39;entrée avec l&#39;attribut name correspondant.\nExemple de recherche d&#39;un élément ressemblant à ceci:\n\n\n&lt;contribution prénom=&quot;fromage&quot; type=&quot;texte&quot;/&gt;\n\n\n\n\n\nWebElement fromage = chauffeur.findElement(Par.prénom(&quot;fromage&quot;));\n\n\n\n\n\nIWebElement fromage = chauffeur.FindElement(Par.prénom(&quot;fromage&quot;));\n\n\n\n\n\nfromage = chauffeur.find_element(:prénom, &quot;fromage&quot;)\n\n\n\n\n\nfromage = chauffeur.find_element_by_name(&quot;fromage&quot;)\n\nou\n\nde selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.PRÉNOM, &quot;fromage&quot;)\n\n\n\n\n\n$ fromage = conducteur $-&gt;find_element(&#39;fromage&#39;, &#39;prénom&#39;)\n\n\n\n\n\nvar fromage = chauffeur.findElement(Par.prénom(&#39;fromage&#39;));\n\n\n\n\n\nPar lien texte\nRecherchez l&#39;élément de lien avec le texte visible correspondant.\nExemple de recherche d&#39;un élément ressemblant à ceci:\n\n\n&lt;une href=&quot;http://www.google.com/search?q=cheese&quot;&gt;fromage&lt;/une&gt;&gt;\n\n\n\n\n\nWebElement fromage = chauffeur.findElement(Par.linkText(&quot;fromage&quot;));\n\n\n\n\n\nIWebElement fromage = chauffeur.FindElement(Par.LinkText(&quot;fromage&quot;));\n\n\n\n\n\nfromage = chauffeur.find_element(: link_text, &quot;fromage&quot;)\n\nou\n\nfromage = chauffeur.find_element(:lien, &quot;fromage&quot;)\n\n\n\n\n\nfromage = chauffeur.find_element_by_link_text(&quot;fromage&quot;)\n\nou\n\nde selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.LINK_TEXT, &quot;fromage&quot;)\n\n\n\n\n\n$ fromage = conducteur $-&gt;find_element(&#39;fromage&#39;, &#39;link_text&#39;)\n\n\n\n\n\nvar fromage = chauffeur.findElement(Par.linkText(&#39;fromage&#39;));\n\n\n\n\n\nPar texte de lien partiel\nRecherchez l&#39;élément de lien avec du texte visible correspondant partiellement.\nExemple de recherche d&#39;un élément ressemblant à ceci:\n\n\n&lt;une href=&quot;http://www.google.com/search?q=cheese&quot;&gt;recherche de fromage&lt;/une&gt;&gt;\n\n\n\n\n\nWebElement fromage = chauffeur.findElement(Par.partialLinkText(&quot;fromage&quot;));\n\n\n\n\n\nIWebElement fromage = chauffeur.FindElement(Par.PartialLinkText(&quot;fromage&quot;));\n\n\n\n\n\nfromage = chauffeur.find_element(: partial_link_text, &quot;fromage&quot;)\n\n\n\n\n\nfromage = chauffeur.find_element_by_partial_link_text(&quot;fromage&quot;)\n\nou\n\nde selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.PARTIAL_LINK_TEXT, &quot;fromage&quot;)\n\n\n\n\n\n$ fromage = conducteur $-&gt;find_element(&#39;fromage&#39;, &#39;partial_link_text&#39;)\n\n\n\n\n\nvar fromage = chauffeur.findElement(Par.partialLinkText(&#39;fromage&#39;));\n\n\n\n\n\nPar CSS\nComme son nom l&#39;indique, il s&#39;agit d&#39;une stratégie de localisation par css. Prise en charge du navigateur natif\nest utilisé par défaut, veuillez donc vous référer aux sélecteurs CSS de w3c pour obtenir une liste des sélecteurs CSS disponibles. Si un navigateur n&#39;a pas\nsupport natif pour les requêtes css, alors Sizzle est utilisé. IE 6,7 et FF3,0\nutilise actuellement Sizzle comme moteur de requête css.\nAttention, tous les navigateurs n&#39;ont pas été créés égaux. Certains CSS pouvant fonctionner dans une version peuvent ne pas fonctionner.\nen autre.\nExemple de trouver le fromage ci-dessous:\n\n\n&lt;div identifiant=&quot;aliments&quot;&gt; &lt;envergure classe=&quot;laitier&quot;&gt;Lait&lt;/envergure&gt; &lt;envergure classe=&quot;laiterie vieillie&quot;&gt;fromage&lt;/envergure&gt; &lt;/div&gt;\n\n\n\n\n\nWebElement fromage = chauffeur.findElement(Par.cssSelector(&quot;#food span.dairy.aged&quot;));\n\n\n\n\n\nIWebElement fromage = chauffeur.FindElement(Par.CssSélecteur(&quot;#food span.dairy.aged&quot;));\n\n\n\n\n\nfromage = chauffeur.find_element(: css, &quot;#food span.dairy.aged&quot;)\n\n\n\n\n\nfromage = chauffeur.find_element_by_css_selector(&quot;#food span.dairy.aged&quot;)\n\nou\n\nde selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.CSS_SELECTOR, &quot;#food span.dairy.aged&quot;)\n\n\n\n\n\n$ fromage = conducteur $-&gt;find_element(&#39;#food span.dairy.aged&#39;, &#39;css&#39;)\n\n\n\n\n\nvar fromage = chauffeur.findElement(Par.css(&#39;#food span.dairy.aged&#39;));\n\n\n\n\n\nPar XPath\nÀ un niveau élevé, WebDriver utilise les fonctionnalités XPath natives d’un navigateur partout\npossible. Sur les navigateurs qui ne prennent pas en charge XPath en natif, nous avons\nfourni notre propre mise en œuvre. Cela peut conduire à un comportement inattendu\nà moins que vous ne connaissiez les différences entre les différents moteurs XPath.\nCeci est un petit résumé, donc pour le morceau de HTML suivant:\n\n\n&lt;contribution type=&quot;texte&quot; prénom=&quot;Exemple&quot; /&gt;\n&lt;CONTRIBUTION type=&quot;texte&quot; prénom=&quot;autre&quot; /&gt;\n\n\n\n\n\nliste&lt;WebElement&gt; contributions = chauffeur.findElements(Par.xpath(&quot;//contribution&quot;));\n\n\n\n\n\nIListe&lt;IWebElement&gt; contributions = chauffeur.FindElements(Par.XPath(&quot;//contribution&quot;));\n\n\n\n\n\ncontributions = chauffeur.find_elements(: xpath, &quot;//contribution&quot;)\n\n\n\n\n\ncontributions = chauffeur.find_elements_by_xpath(&quot;//contribution&quot;)\n\nou\n\nde selenium.webdriver.common.by importation Par\ncontributions = chauffeur.find_elements(Par.XPATH, &quot;//contribution&quot;)\n\n\n\n\n\n@contributions = conducteur $-&gt;find_elements(&#39;//contribution&#39;)\n\n\n\n\n\nchauffeur.findElements(Par.xpath(&quot;//contribution&quot;))\n.puis(les fromages =&gt; console.bûche(les fromages.longueur));\n\n\n\nLe nombre de correspondances suivantes sera trouvé\nParfois, les éléments HTML n&#39;ont pas besoin d&#39;attributs pour être explicitement déclarés\nparce qu&#39;ils vont par défaut aux valeurs connues. Par exemple, la balise «input» ne\npas besoin de l’attribut «type» car il utilise par défaut «text». La règle de\npouce lorsque vous utilisez xpath dans WebDriver est que vous ne devrait pas attendez-vous à pouvoir\nfaire correspondre à ces attributs implicites.\n\n\nUtiliser JavaScript\nVous pouvez exécuter du javascript arbitraire pour trouver un élément et tant que vous retournez un élément DOM,\nil sera automatiquement converti en objet WebElement.\nExemple simple sur une page sur laquelle jQuery est chargé:\n\n\nWebElement élément = (WebElement) ((JavascriptExecutor)chauffeur).executeScript(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)\n\n\n\n\n\nIWebElement élément = (IWebElement) ((IJavaScriptExecutor)chauffeur).ExecuteScript(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)\n\n\n\n\n\nélément = chauffeur.execute_script(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)\n\n\n\n\n\nélément = chauffeur.execute_script(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)\n\n\n\n\n\nélément = conducteur $-&gt;execute_script(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)\n\n\n\nTrouver tous les éléments d&#39;entrée pour chaque étiquette sur une page:\n\n\nliste&lt;WebElement&gt; Étiquettes = chauffeur.findElements(Par.tagName(&quot;étiquette&quot;));\nliste&lt;WebElement&gt; contributions = (liste&lt;WebElement&gt;) ((JavascriptExecutor)chauffeur).executeScript(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, Étiquettes)\n\n\n\n\n\nIListe&lt;IWebElement&gt; Étiquettes = chauffeur.FindElements(Par.TagName(&quot;étiquette&quot;));\nIListe&lt;IWebElement&gt; contributions = (IListe&lt;IWebElement&gt;) ((IJavaScriptExecutor)chauffeur).ExecuteScript(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, Étiquettes)\n\n\n\n\n\nÉtiquettes = chauffeur.find_elements(: tag_name, &quot;étiquette&quot;)\ncontributions = chauffeur.execute_script(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, Étiquettes)\n\n\n\n\n\nÉtiquettes = chauffeur.find_elements_by_tag_name(&quot;étiquette&quot;)\ncontributions = chauffeur.execute_script(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, Étiquettes)\n\n\n\n\n\nmon @Étiquettes = conducteur $-&gt;find_elements(&#39;étiquette&#39;, &#39;tag_name&#39;)\nmon $ entrées = conducteur $-&gt;execute_script(&quot;var labels = arguments, input = []; pour (var i = 0; i &lt;labels.length; i ++) inputs.push (document.getElementById (labels[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, @Étiquettes)\n\n\n\n\n\n\nObtenir des valeurs de texte\nLes utilisateurs souhaitent souvent récupérer la valeur innerText contenue dans un élément. Cela renvoie une valeur de chaîne unique. Notez que cela ne fera que renvoyer le texte visible affiché sur la page.\n\n\nWebElement élément = chauffeur.findElement(Par.identifiant(&quot;elementID&quot;));\nélément.getText();\n\n\n\n\n\nIWebElement élément = chauffeur.findElement(Par.identifiant(&quot;elementID&quot;));\nélément.Texte;\n\n\n\n\n\nélément = chauffeur.find_element : id =&gt; &quot;element_id&quot;\nélément.texte\n\n\n\n\n\nélément = chauffeur.find_element_by_id(&quot;element_id&quot;)\nélément.texte\n\n\n\n\n\nvar element = driver.findElement (By.id (&#39;elementID&#39;));\nelement.getText (). then (text =&gt; console.log (`Text is $ text`));\n\n\n\n\n\nEntrée utilisateur &#8211; Remplir des formulaires\nNous avons déjà vu comment saisir du texte dans une zone de texte ou un champ de texte, mais\nsur les autres éléments? Vous pouvez &quot;basculer&quot; l’état des cases à cocher, et vous\npouvez cliquer sur «cliquer» pour définir quelque chose comme une balise OPTION sélectionnée. Transaction\navec les balises SELECT n’est pas si mal:\n\n\nWebElement sélectionner = chauffeur.findElement(Par.tagName(&quot;sélectionner&quot;));\nliste&lt;WebElement&gt; toutes les options = sélectionner.findElements(Par.tagName(&quot;option&quot;));\npour (WebElement option : toutes les options) \n    Système.en dehors.imprimer(Chaîne.format(&quot;La valeur est:% s&quot;, option.obtenirAttribuer(&quot;valeur&quot;)));\n    option.Cliquez sur();\n\n\n\n\n\n\nIWebElement sélectionner = chauffeur.FindElement(Par.TagName(&quot;sélectionner&quot;));\nIListe&lt;IWebElement&gt; toutes les options = sélectionner.FindElements(Par.TagName(&quot;option&quot;));\npour chaque (IWebElement option dans toutes les options)\n\n    Console.WriteLine(&quot;La valeur est: &quot; + option.GetAttribute(&quot;valeur&quot;));\n    option.Cliquez sur();\n\n\n\n\n\n\nsélectionner = chauffeur.find_element(: tag_name, &quot;sélectionner&quot;)\ntoutes les options = sélectionner.find_elements(: tag_name, &quot;option&quot;)\ntoutes les options.chaque faire |option|\n  met &quot;La valeur est: &quot; + option.attribut(&quot;valeur&quot;)\n  option.Cliquez sur\nfin\n\n\n\n\n\nsélectionner = chauffeur.find_element_by_tag_name(&quot;sélectionner&quot;)\ntoutes les options = sélectionner.find_elements_by_tag_name(&quot;option&quot;)\npour option dans toutes les options:\n    impression &quot;La valeur est: &quot; + option.get_attribute(&quot;valeur&quot;)\n    option.Cliquez sur()\n\n\n\n\n\n$ select = conducteur $-&gt;find_element(&#39;sélectionner&#39;, &#39;tag_name&#39;)\n@toutes les options = conducteur $-&gt;find_child_element($ select, &quot;option&quot;, &#39;tag_name&#39;)\npour chaque option $ (@toutes les options) \n    impression &quot;La valeur est: &quot;.option $-&gt;get_attribute(&quot;valeur&quot;).&quot; n&quot;;\n    option $-&gt;Cliquez sur();\n\n\n\n\nCeci trouvera le premier élément “SELECT” sur la page et parcourra chaque\nà tour de rôle, en affichant leurs valeurs et en les sélectionnant à tour de rôle.\nComme vous le constaterez, ce n’est pas le moyen le plus efficace de traiter avec SELECT\néléments. Les classes de support de WebDriver comprennent une classe appelée «Select», qui\nfournit des méthodes utiles pour interagir avec ceux-ci.\n\n\nSélectionner sélectionner = Nouveau Sélectionner(chauffeur.findElement(Par.tagName(&quot;sélectionner&quot;)));\nsélectionner.tout déselectionner();\nsélectionner.selectByVisibleText(&quot;Edam&quot;)\n\n\n\n\n\nSelectElement sélectionner = Nouveau SelectElement(chauffeur.FindElement(Par.TagName(&quot;sélectionner&quot;)));\nsélectionner.Tout déselectionner();\nsélectionner.SelectByText(&quot;Edam&quot;)\n\n\n\n\n\n# disponible depuis 2.14\n    sélectionner = Sélénium::WebDriver::Soutien::Sélectionner.Nouveau(chauffeur.find_element(: tag_name, &quot;sélectionner&quot;))\n    sélectionner.tout déselectionner()\n    sélectionner.select_by(:texte, &quot;Edam&quot;)\n\n\n\n\n\n# disponible depuis 2.12\nde selenium.webdriver.support.ui importation Sélectionner\nsélectionner = Sélectionner(chauffeur.find_element_by_tag_name(&quot;sélectionner&quot;))\nsélectionner.tout déselectionner()\nsélectionner.select_by_visible_text(&quot;Edam&quot;)\n\n\n\nCeci désélectionnera toutes les OPTIONS du premier SELECT sur la page, puis\nsélectionnez l&#39;OPTION avec le texte affiché «Edam».\nUne fois le formulaire rempli, vous souhaiterez probablement le soumettre. Un\nPour ce faire, recherchez le bouton «Soumettre» et cliquez dessus:\n\n\nchauffeur.findElement(Par.identifiant(&quot;soumettre&quot;)).Cliquez sur();\n\n\n\n\n\nchauffeur.FindElement(Par.Id(&quot;soumettre&quot;)).Cliquez sur();\n\n\n\n\n\nchauffeur.find_element(: id, &quot;soumettre&quot;).Cliquez sur\n\n\n\n\n\nchauffeur.find_element_by_id(&quot;soumettre&quot;).Cliquez sur()\n\n\n\n\n\nconducteur $-&gt;find_element(&#39;soumettre&#39;,&#39;id&#39;)-&gt;Cliquez sur()\n\n\n\n\n\nchauffeur.findElement(Par.identifiant(&#39;soumettre&#39;).Cliquez sur();\n\n\n\nWebDriver a aussi la méthode de commodité «submit» sur chaque élément.\nSi vous appelez cela sur un élément du formulaire, WebDriver remontera le DOM.\njusqu&#39;à ce qu&#39;il trouve le formulaire ci-joint et appelle ensuite soumettre à ce sujet. Si la\nl’élément n’est pas dans un formulaire, alors le NoSuchElementException    sera jeté:\n\n\nSe déplacer entre Windows et les cadres\nCertaines applications Web ont plusieurs cadres ou plusieurs fenêtres. WebDriver prend en charge\nvous déplacer entre les fenêtres nommées en utilisant la méthode «switchTo»:\n\n\nchauffeur.basculer vers()la fenêtre(&quot;windowName&quot;)\n\n\n\n\n\nchauffeur.Basculer vers()La fenêtre(&quot;windowName&quot;)\n\n\n\n\n\nchauffeur.basculer vers.la fenêtre(&quot;windowName&quot;)\n\n\n\n\n\nchauffeur.basculer vers.la fenêtre(&quot;windowName&quot;)\n\n\n\n\n\nconducteur $-&gt;switch_to_window(&quot;windowName&quot;)\n\n\n\n\n\nchauffeur.basculer vers()la fenêtre(&#39;windowName&#39;)\n\n\n\nTous les appels à chauffeur    sera maintenant interprété comme étant dirigé vers le\nfenêtre particulière. Mais comment connaissez-vous le nom de la fenêtre? Regardez le\njavascript ou lien qui l&#39;a ouvert:\n\n\n&lt;une href=&quot;quelque part.html&quot; cible=&quot;windowName&quot;&gt;Cliquez ici pour ouvrir une nouvelle fenêtre&lt;/une&gt;\n\n\n\nAlternativement, vous pouvez passer un &quot;handle de fenêtre&quot; à &quot;switchTo (). Window ()&quot;\nméthode. Sachant cela, il est possible de parcourir toutes les fenêtres ouvertes comme ceci:\n\n\npour (Chaîne manipuler : chauffeur.getWindowHandles()) \n    chauffeur.basculer vers()la fenêtre(manipuler)\n\n\n\n\n\n\npour chaque (chaîne manipuler dans chauffeur.Poignées de fenêtre) \n    chauffeur.Basculer vers()La fenêtre(manipuler)\n\n\n\n\n\n\nchauffeur.window_handles.chaque faire |manipuler|\n    chauffeur.switch_to.la fenêtre manipuler\nfin\n\n\n\n\n\npour manipuler dans chauffeur.window_handles:\n    chauffeur.switch_to.la fenêtre(manipuler)\n\n\n\n\n\n$windows = $driver-&gt;get_window_handles()\nforeach $window (@$windows) \n    $driver-&gt;switch_to_window($window)\n\n\n\n\nYou can also switch from frame to frame (or into iframes):\n\n\nchauffeur.switchTo().Cadre(&quot;frameName&quot;)\n\n\n\n\n\nchauffeur.SwitchTo().Cadre(&quot;frameName&quot;)\n\n\n\n\n\nchauffeur.switch_to.Cadre &quot;frameName&quot;\n\n\n\n\n\nchauffeur.switch_to.Cadre(&quot;frameName&quot;)\n\n\n\n\n\n$driver-&gt;switch_to_frame(&#39;frameName&#39;)\n\n\n\n\n\nchauffeur.switchTo().Cadre(&#39;frameName&#39;)\n\n\n\n\n\nNavigation: History and Location\nEarlier, we covered navigating to a page using the “get” command (\ndriver.get(&quot;http://www.example.com&quot;)    ou driver.Url=&quot;http://www.example.com&quot;    in C#).\nAs you’ve seen, WebDriver has a number of smaller, task-focused interfaces, and navigation is a useful task.\nBecause loading a page is such a fundamental requirement, the method to do this\nlives on the main WebDriver interface, but it’s simply a synonym to:\n\n\nchauffeur.naviguer().à(&quot;http://www.example.com&quot;)\n\n\n\n\n\nchauffeur.Navigate().GoToUrl(&quot;http://www.example.com&quot;)\n\n\n\n\n\nchauffeur.naviguer.à &quot;http://www.example.com&quot;\n\n\n\n\n\nchauffeur.obtenir(&quot;http://www.example.com&quot;)  # python doesn&#39;t have driver.navigate\n\n\n\n\n\n$driver-&gt;naviguer(&#39;http://www.example.com&#39;)\n\n\n\n\n\nchauffeur.naviguer().à(&#39;http://www.example.com&#39;)\n\n\n\nTo reiterate: “navigate().to()&quot; et &quot;get()” do exactly the same thing.\nOne’s just a lot easier to type than the other!\nThe “navigate” interface also exposes the ability to move backwards and forwards in your browser’s history:\n\n\nchauffeur.naviguer().vers l&#39;avant();\nchauffeur.naviguer().retour();\n\n\n\n\n\nchauffeur.Navigate().Vers l&#39;avant();\nchauffeur.Navigate().Retour();\n\n\n\n\n\nchauffeur.naviguer.vers l&#39;avant\nchauffeur.naviguer.retour\n\n\n\n\n\nchauffeur.vers l&#39;avant()\nchauffeur.retour()\n\n\n\n\n\nchauffeur.naviguer().vers l&#39;avant();\nchauffeur.naviguer().retour();\n\n\n\nPlease be aware that this functionality depends entirely on the underlying\nnavigateur. It’s just possible that something unexpected may happen when you call\nthese methods if you’re used to the behaviour of one browser over another.\n\n\nCookies\nBefore we leave these next steps, you may be interested in understanding how to\nuse cookies. First of all, you need to be on the domain that the cookie will be\nvalid for. If you are trying to preset cookies before\nyou start interacting with a site and your homepage is large / takes a while to load\nan alternative is to find a smaller page on the site (typically the 404 page is small,\npar exemple. http://example.com/some404page).\n\n\n// Go to the correct domain\nchauffeur.obtenir(&quot;http://www.example.com&quot;)\n\n// Now set the cookie. This one&#39;s valid for the entire domain\nBiscuit biscuit = Nouveau Biscuit(&quot;key&quot;, &quot;value&quot;)\nchauffeur.gérer().addCookie(biscuit)\n\n// And now output all the available cookies for the current URL\nEnsemble&lt;Biscuit&gt; allCookies = chauffeur.gérer().getCookies();\npour (Biscuit loadedCookie : allCookies) \n    Système.en dehors.imprimer(Chaîne.format(&quot;%s -&gt; %s&quot;, loadedCookie.getName(), loadedCookie.getValue()));\n\n\n// You can delete cookies in 3 ways\n// By name\nchauffeur.gérer().deleteCookieNamed(&quot;CookieName&quot;)\n// By Cookie\nchauffeur.gérer().deleteCookie(loadedCookie)\n// Or all of them\nchauffeur.gérer().deleteAllCookies();\n\n\n\n\n\n# Go to the correct domain\nchauffeur.obtenir(&quot;http://www.example.com&quot;)\n\n# Now set the cookie. Here&#39;s one for the entire domain\n# the cookie name here is &#39;key&#39; and its value is &#39;value&#39;\nchauffeur.add_cookie(&#39;name&#39;:&#39;key&#39;, &#39;value&#39;:&#39;value&#39;, &#39;path&#39;:&#39;/&#39;)\n# additional keys that can be passed in are:\n# &#39;domain&#39; -&gt; String,\n# &#39;secure&#39; -&gt; Boolean,\n# &#39;expiry&#39; -&gt; Milliseconds since the Epoch it should expire.\n\n# And now output all the available cookies for the current URL\npour biscuit dans chauffeur.get_cookies():\n    impression &quot;% s    -&gt; % s&quot; % (biscuit[[[[&#39;name&#39;], biscuit[[[[&#39;value&#39;])\n\n# You can delete cookies in 2 ways\n# By name\nchauffeur.delete_cookie(&quot;CookieName&quot;)\n# Or all of them\nchauffeur.delete_all_cookies()\n\n\n\n\n\n# Go to the correct domain\nchauffeur.obtenir &quot;http://www.example.com&quot;\n\n# Now set the cookie. Here&#39;s one for the entire domain\n# the cookie name here is &#39;key&#39; and its value is &#39;value&#39;\nchauffeur.gérer.add_cookie(:name =&gt; &#39;key&#39;, :value =&gt; &#39;value&#39;)\n# additional keys that can be passed in are:\n# :path =&gt; String, :secure -&gt; Boolean, :expires -&gt; Time, DateTime, or seconds since epoch\n\n# And now output all the available cookies for the current URL\nchauffeur.gérer.all_cookies.chaque \n    met &quot;#biscuit[[[[:name]    =&gt; #biscuit[[[[:value]&quot;\n\n\n# You can delete cookies in 2 ways\n# By name\nchauffeur.gérer.delete_cookie &quot;CookieName&quot;\n# Or all of them\nchauffeur.gérer.delete_all_cookies\n\n\n\n\n\n# Go to the correct domain\n$driver-&gt;obtenir(&quot;http://www.example.com&quot;)\n\n# Now set the cookie. Here&#39;s one for the entire domain\n# the cookie name here is &#39;key&#39; and its value is &#39;value&#39;\n$driver-&gt;add_cookie(&#39;key&#39;, &#39;value&#39;, &#39;/&#39;, &#39;example.com&#39;, 0)\n# additional required inputs are path and domain\n# the final input secure is an optional boolean\n\n# And now output all the available cookies for the current URL\nmon $cookies_ref = $driver-&gt;get_all_cookies(); # Returns reference to AoH\npour $cookie_ref (@$cookies_ref) \n    printf &quot;%s =&gt; %sn&quot;, $cookie_ref-&gt;prénom, $cookie_ref-&gt;valeur;\n\n\n# You can delete cookies in 2 ways\n# By name\n$driver-&gt;delete_cookie_named(&quot;key&quot;)\n# Or all of them\n$driver-&gt;delete_all_cookies();\n\n\n\n\n\n# Go to the correct domain\ndriver.get(&#39;http://www.example.com&#39;);\n\n# Now set the basic cookie. Here&#39;s one for the entire domain\n# the cookie name here is &#39;key&#39; and its value is &#39;value&#39;\ndriver.manage().addCookie(name: &#39;cookie-1&#39;, value: &#39;cookieValue&#39;);\n\n# And now output all the available cookies for the current URL\ndriver.manage().getCookies().then( (loadedCookies) =&gt;\n    for (let cookie in loadedCookies) \n    console.log(&#39;printing Cookies loaded : &#39;+cookie);\n    \n    );\n# You can delete cookies in 2 ways\n# By name\ndriver.manage().deleteCookie(&#39;cookie-1&#39;);\n# Or all of them\ndriver.manage().deleteAllCookies();\n\n\n\n\n\nChanging the User Agent\nThis is easy with the Firefox Driver:\n\n\nFirefoxProfile profil = Nouveau FirefoxProfile();\nprofil.addAdditionalPreference(&quot;general.useragent.override&quot;, &quot;some UA string&quot;)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)\n\n\n\n\n\nvar profil = Nouveau FirefoxProfile();\nprofil.SetPreference(&quot;general.useragent.override&quot;, &quot;some UA string&quot;)\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)\n\n\n\n\n\nprofil = Sélénium::WebDriver::Firefox::Profil.Nouveau\nprofil[[[[&#39;general.useragent.override&#39;] = &quot;some UA string&quot;\nchauffeur = Sélénium::WebDriver.pour :firefox, :profile =&gt; profil\n\n\n\n\n\nprofil = webdriver.FirefoxProfile()\nprofil.set_preference(&quot;general.useragent.override&quot;, &quot;some UA string&quot;)\nchauffeur = webdriver.Firefox(profil)\n\n\n\n\n\nutilisation Selenium::Remote::Driver::Firefox::Profile;\nmon $profile = Selenium::Remote::Driver::Firefox::Profile-&gt;Nouveau;\n$profile-&gt;set_preference(&#39;general.useragent.overide&#39; =&gt; &quot;some UA string&quot;)\nmon $driver = Selenium::Remote::Driver-&gt;Nouveau(&#39;firefox_profile&#39; =&gt; $profile)\n\n\n\n\n\nDrag And Drop\nHere’s an example of using the Actions class to perform a drag and drop.\nNative events are required to be enabled.\n\n\nWebElement élément = chauffeur.findElement(Par.prénom(&quot;source&quot;));\nWebElement cible = chauffeur.findElement(Par.prénom(&quot;target&quot;));\n\n(Nouveau actes(chauffeur)).dragAndDrop(élément, cible).effectuer();\n\n\n\n\n\nIWebElement élément = chauffeur.FindElement(Par.prénom(&quot;source&quot;));\nIWebElement cible = chauffeur.FindElement(Par.prénom(&quot;target&quot;));\n(Nouveau actes(chauffeur)).DragAndDrop(élément, cible).Effectuer();\n\n\n\n\n\nélément = chauffeur.find_element(:name =&gt; &#39;source&#39;)\ncible = chauffeur.find_element(:name =&gt; &#39;target&#39;)\n\nchauffeur.action.drag_and_drop(élément, cible).effectuer\n\n\n\n\n\nde selenium.webdriver.common.action_chains importation ActionChains\nélément = chauffeur.find_element_by_name(&quot;source&quot;)\ncible =  chauffeur.find_element_by_name(&quot;target&quot;)\n\nActionChains(chauffeur).drag_and_drop(élément, cible).effectuer()\n\n\n\n\n\n\nDriver Specifics and Tradeoffs\n\n\nSelenium-WebDriver’s Drivers\nWebDriver is the name of the key interface against which tests should be\nwritten, but there are several implementations. Ceux-ci inclus:\n\nHtmlUnit Driver\nThis is currently the fastest and most lightweight implementation of WebDriver.\nAs the name suggests, this is based on HtmlUnit. HtmlUnit is a java based implementation\nof a WebBrowser without a GUI. For any language binding (other than java) the\nSelenium Server is required to use this driver.\n\nUsage\n\n\nWebDriver chauffeur = Nouveau HtmlUnitDriver();\n\n\n\n\n\nIWebDriver chauffeur = Nouveau RemoteWebDriver(Nouveau Uri(&quot;http://127.0.0.1:4444/wd/hub&quot;),\n                                        DesiredCapabilities.HtmlUnit());\n\n\n\n\n\nchauffeur = webdriver.Remote(&quot;http://localhost:4444/wd/hub&quot;, webdriver.DesiredCapabilities.HTMLUNIT.copie())\n\n\n\n\n\nchauffeur = Sélénium::WebDriver.pour :remote, :url =&gt; &quot;http://localhost:4444/wd/hub&quot;, :desired_capabilities =&gt; :htmlunit\n\n\n\n\n\nmon $driver = Selenium::Remote::Driver-&gt;Nouveau(browser_name =&gt; &#39;htmlunit&#39;, remote_server_addr =&gt; &#39;localhost&#39;, Port =&gt; &#39;4444&#39;)\n\n\n\n\n\nAvantages\n\nFastest implementation of WebDriver\nA pure Java solution and so it is platform independent.\nSupports JavaScript\n\n\n\nLes inconvénients\n\nEmulates other browsers’ JavaScript behaviour (see below)\n\n\n\nJavaScript in the HtmlUnit Driver\nNone of the popular browsers uses the JavaScript engine used by HtmlUnit\n(Rhino). If you test JavaScript using HtmlUnit the results may differ\nsignificantly from those browsers.\nWhen we say “JavaScript” we actually mean “JavaScript and the DOM”. Although\nthe DOM is defined by the W3C each browser has its own quirks and differences\nin their implementation of the DOM and in how JavaScript interacts with it.\nHtmlUnit has an impressively complete implementation of the DOM and has good\nsupport for using JavaScript, but it is no different from any other\nbrowser: it has its own quirks and differences from both the W3C standard and\nthe DOM implementations of the major browsers, despite its ability to mimic\nother browsers.\nWith WebDriver, we had to make a choice; do we enable HtmlUnit’s JavaScript\ncapabilities and run the risk of teams running into problems that only manifest\nthemselves there, or do we leave JavaScript disabled, knowing that there are\nmore and more sites that rely on JavaScript? We took the conservative approach,\nand by default have disabled support when we use HtmlUnit. With each release of\nboth WebDriver and HtmlUnit, we reassess this decision: we hope to enable\nJavaScript by default on the HtmlUnit at some point.\n\n\nEnabling JavaScript\nIf you can’t wait, enabling JavaScript support is very easy:\n\n\nHtmlUnitDriver chauffeur = Nouveau HtmlUnitDriver(vrai)\n\n\n\n\n\nWebDriver chauffeur = Nouveau RemoteWebDriver(Nouveau Uri(&quot;http://127.0.0.1:4444/wd/hub&quot;),\n                       DesiredCapabilities.HtmlUnitWithJavaScript());\n\n\n\n\n\ncasquettes = Sélénium::WebDriver::Remote::Les capacités.htmlunit(:javascript_enabled =&gt; vrai)\nchauffeur = Sélénium::WebDriver.pour :remote, :url =&gt; &quot;http://localhost:4444/wd/hub&quot;, :desired_capabilities =&gt; casquettes\n\n\n\n\n\nchauffeur = webdriver.Remote(&quot;http://localhost:4444/wd/hub&quot;, webdriver.DesiredCapabilities.HTMLUNITWITHJS)\n\n\n\n\n\n$driver = Nouveau Selenium::Remote::Driver( browser_name=&gt;&#39;firefox&#39;, Port=&gt; 4444, version=&gt;&#39;&#39;, Plate-forme=&gt;&#39;LINUX&#39;, javascript=&gt;1, auto_close=&gt;1)\n\n\n\nThis will cause the HtmlUnit Driver to emulate Firefox 3.6’s JavaScript\nhandling by default.\n\n\n\nFirefox Driver\nControls the Firefox browser using a Firefox plugin.\nThe Firefox Profile that is used is stripped down from what is installed on the\nmachine to only include the Selenium WebDriver.xpi (plugin). A few settings are\nalso changed by default (see the source to see which ones)\nFirefox Driver is capable of being run and is tested on Windows, Mac, Linux.\nCurrently on versions 3.6, 10, latest &#8211; 1, latest\n\nUsage\n\n\nWebDriver chauffeur = Nouveau FirefoxDriver();\n\n\n\n\n\nIWebDriver chauffeur = Nouveau FirefoxDriver();\n\n\n\n\n\nchauffeur = webdriver.Firefox()\n\n\n\n\n\nchauffeur = Sélénium::WebDriver.pour :firefox\n\n\n\n\n\nmon $driver = Selenium::Remote::Driver-&gt;Nouveau;\n\n\n\n\n\nModifying the Firefox Profile\nSuppose that you wanted to modify the user agent string (as above), but you’ve\ngot a tricked out Firefox profile that contains dozens of useful extensions.\nThere are two ways to obtain this profile. Assuming that the profile has been\ncreated using Firefox’s profile manager (firefox -ProfileManager):\n\n\nProfilesIni allProfiles = Nouveau ProfilesIni();\nFirefoxProfile profil = allProfiles.getProfile(&quot;WebDriver&quot;)\nprofil.setPreferences(&quot;foo.bar&quot;, 23)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)\n\n\n\n\n\nvar profileManager = Nouveau FirefoxProfileManager();\nFirefoxProfile profil = profileManager.GetProfile(&quot;WebDriver&quot;)\nprofil.SetPreference(&quot;foo.bar&quot;, 23)\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)\n\n\n\nAlternatively, if the profile isn’t already registered with Firefox:\n\n\nFile profileDir = Nouveau File(&quot;path/to/top/level/of/profile&quot;)\nFirefoxProfile profil = Nouveau FirefoxProfile(profileDir)\nprofil.addAdditionalPreferences(extraPrefs)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)\n\n\n\n\n\nFirefoxProfile profil = Nouveau FirefoxProfile(&quot;path/to/top/level/of/profile&quot;)\nprofil.SetPreference(&quot;extra&quot;, &quot;pref&quot;)\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)\n\n\n\nAs we develop features in the Firefox Driver, we expose the ability to use them.\nFor example, until we feel native events are stable on Firefox for Linux, they\nare disabled by default. To enable them:\n\n\nFirefoxProfile profil = Nouveau FirefoxProfile();\nprofil.setEnableNativeEvents(vrai)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)\n\n\n\n\n\nvar profil = Nouveau FirefoxProfile EnableNativeEvents = vrai;\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)\n\n\n\n\n\nprofil = webdriver.FirefoxProfile()\nprofil.native_events_enabled = Vrai\nchauffeur = webdriver.Firefox(profil)\n\n\n\n\n\nprofil = Sélénium::WebDriver::Firefox::Profil.Nouveau\nprofil.native_events = vrai\nchauffeur = Sélénium::WebDriver.pour :firefox, :profile =&gt; profil\n\n\n\n\n\n\nInternet Explorer Driver\nThe InternetExplorerDriver is a standalone server which implements WebDriver’s wire protocol. This driver has been tested with IE 7, 8, 9, 10, and 11 on appropriate combinations of Vista, Windows 7, Windows 8, and Windows 8.1. As of 15 April 2014, IE 6 is no longer supported.\nThe driver supports running 32-bit and 64-bit versions of the browser. The choice of how to determine which “bit-ness” to use in launching the browser depends on which version of the IEDriverServer.exe is launched. If the 32-bit version of IEDriverServer.exe is launched, the 32-bit version of IE will be launched. Similarly, if the 64-bit version of IEDriverServer.exe is launched, the 64-bit version of IE will be launched.\n\nUsage\n\n\nWebDriver chauffeur = Nouveau InternetExplorerDriver();\n\n\n\n\n\nIWebDriver chauffeur = Nouveau InternetExlorerDriver();\n\n\n\n\n\nchauffeur = Sélénium::WebDriver.pour :ie\n\n\n\n\n\nmon $driver = Selenium::Remote::Driver-&gt;Nouveau(browser_name =&gt; &#39;internet explorer&#39;)\n\n\n\n\n\nAvantages\n\nRuns in a real browser and supports Javascript\n\n\n\nLes inconvénients\n\nObviously the InternetExplorerDriver will only work on Windows!\nComparatively slow (though still pretty snappy!)\n\n\n\n\nChromeDriver\nChromeDriver is maintained / supported by the Chromium\nproject iteslf. WebDriver works with Chrome through the chromedriver binary (found on the chromium\nproject’s download page). You need to have both chromedriver and a version of chrome browser installed.\nchromedriver needs to be placed somewhere on your system’s path in order for WebDriver to automatically\ndiscover it. The Chrome browser itself is discovered by chromedriver in the default installation path.\nThese both can be overridden by environment variables. Please refer to the wiki\nfor more information.\n\nUsage\n\n\nWebDriver chauffeur = Nouveau ChromeDriver();\n\n\n\n\n\nIWebDriver chauffeur = Nouveau ChromeDriver();\n\n\n\n\n\nchauffeur = webdriver.Chrome()\n\n\n\n\n\nchauffeur = Sélénium::WebDriver.pour :chrome\n\n\n\n\n\nmon $driver = Selenium::Remote::Driver-&gt;Nouveau(browser_name =&gt; &#39;chrome&#39;)\n\n\n\n\n\nAvantages\n\nRuns in a real browser and supports JavaScript\nBecause Chrome is a Webkit-based browser, the ChromeDriver may allow you to\nverify that your site works in Safari. Note that since Chrome uses its own V8\nJavaScript engine rather than Safari’s Nitro engine, JavaScript execution may\ndiffer.\n\n\n\n\n\nAlternative Back-Ends: Mixing WebDriver and RC Technologies\n\nWebDriver-Backed Selenium-RC\nThe Java version of WebDriver provides an implementation of the Selenium-RC API.  These means that\nyou can use the underlying WebDriver technology using the Selenium-RC API.  This is primarily\nprovided for backwards compatibility.  It allows those who have existing test suites using the\nSelenium-RC API to use WebDriver under the covers.  It’s provided to help ease the migration path\nto Selenium-WebDriver.  Also, this allows one to use both APIs, side-by-side, in the same test code.\nSelenium-WebDriver is used like this:\n\n\n// You may use any WebDriver implementation. Firefox is used here as an example\nWebDriver chauffeur = Nouveau FirefoxDriver();\n\n// A &quot;base url&quot;, used by selenium to resolve relative URLs\n Chaîne baseUrl = &quot;http://www.google.com&quot;;\n\n// Create the Selenium implementation\nSélénium sélénium = Nouveau WebDriverBackedSelenium(chauffeur, baseUrl)\n\n// Perform actions with selenium\n\nsélénium.ouvrir(&quot;http://www.google.com&quot;)\nsélénium.type(&quot;name=q&quot;, &quot;cheese&quot;)\nsélénium.Cliquez sur(&quot;name=btnG&quot;)\n\n// Get the underlying WebDriver implementation back. This will refer to the\n// same WebDriver instance as the &quot;driver&quot; variable above.\nWebDriver driverInstance = ((WebDriverBackedSelenium) sélénium).getWrappedDriver();\n\n//Finally, close the browser. Call stop on the WebDriverBackedSelenium instance\n//instead of calling driver.quit(). Otherwise, the JVM will continue running after\n//the browser has been closed.\nsélénium.Arrêtez();\n\n\n\n\nAvantages\n\nAllows for the WebDriver and Selenium APIs to live side-by-side\nProvides a simple mechanism for a managed migration from the Selenium RC API\nto WebDriver’s\nDoes not require the standalone Selenium RC server to be run\n\n\n\nLes inconvénients\n\nDoes not implement every method\nMore advanced Selenium usage (using “browserbot” or other built-in JavaScript\nmethods from Selenium Core) may not work\nSome methods may be slower due to underlying implementation differences\n\n\n\n\nBacking WebDriver with Selenium\nWebDriver doesn’t support as many browsers as Selenium RC does, so in order to\nprovide that support while still using the WebDriver API, you can make use of\nla SeleneseCommandExecutor\nSafari is supported in this way with the following code (be sure to disable\npop-up blocking):\n\n\nDesiredCapabilities capacités = Nouveau DesiredCapabilities();\ncapacités.setBrowserName(&quot;safari&quot;)\nCommandExecutor executor = Nouveau SeleneseCommandExecutor(Nouveau URL(&quot;http://localhost:4444/&quot;), Nouveau URL(&quot;http://www.google.com/&quot;), capacités)\nWebDriver chauffeur = Nouveau RemoteWebDriver(executor, capacités)\n\n\n\nThere are currently some major limitations with this approach, notably that\nfindElements doesn’t work as expected. Also, because we’re using Selenium Core\nfor the heavy lifting of driving the browser, you are limited by the JavaScript\nsandbox.\n\n\n\nRunning Standalone Selenium Server for use with RemoteDrivers\nFrom Selenium’s Download page download selenium-server-standalone-.jar and optionally IEDriverServer. If you plan to work with Chrome, download it from Google Code.\nUnpack IEDriverServer and/or chromedriver and put them in a directory which is on the $PATH / %PATH% &#8211; the Selenium Server should then be able to handle requests for IE / Chrome without additional modifications.\nStart the server on the command line with\n\n\njava -jar /selenium-server-standalone-.pot\n\n\n\nIf you want to use native events functionality, indicate this on the command line with the option\n\n\n-Dwebdriver.enable.native.events=1\n\n\n\nFor other command line options, execute\n\n\njava -jar /selenium-server-standalone-.jar -help\n\n\n\nIn order to function properly, the following ports should be allowed incoming TCP connections: 4444, 7054-5 (or twice as many ports as the number of concurrent instances you plan to run). Under Windows, you may need to unblock the applications as well.\n\n\n\nRessources supplémentaires\nYou can find further resources for WebDriver\nin WebDriver’s wiki\nOf course, don’t hesitate to do an internet search on any Selenium topic, including\nSelenium-WebDriver’s drivers.  There are quite a few blogs on Selenium along with numerous posts\non various user forums.  Additionally the Selenium User’s Group is a great resource.\nhttp://groups.google.com/group/selenium-users\n\n\nProchaines étapes\nThis chapter has simply been a high level walkthrough of WebDriver and some of its key\ncapabilities.  Once getting familiar with the Selenium-WebDriver API you will then want to learn\nhow to build test suites for maintainability, extensibility, and reduced fragility when features of\nthe AUT frequently change.  The approach most Selenium experts are now recommending is to design\nyour test code using the Page Object Design Pattern along with possibly a Page Factory.\nSelenium-WebDriver provides support for this by supplying a PageFactory class in Java and C#.\nThis is presented, along with other advanced topics, in the\nChapitre suivant. Also, for high-level description of this\ntechnique, you may want to look at the\nTest Design Considerations chapter. Both of these\nchapters present techniques for writing more maintainable tests by making your test code more\nmodular.\n\n\nClick to rate this post!\r\n                                   \r\n                               [Total: 0  Average: 0]","paragraphs":["REMARQUE: nous travaillons actuellement à la documentation de ces sections.\nNous pensons que les informations ici sont exactes, mais sachez que nous travaillons toujours sur ce\nchapitre. Des informations supplémentaires seront fournies au fur et à mesure, ce qui devrait rendre ce chapitre plus utile.\nsolide.","Présentation de WebDriver\nLa principale nouvelle fonctionnalité de Selenium 2.0 est l&#39;intégration de l&#39;API WebDriver.\nWebDriver est conçu pour fournir une interface de programmation plus simple et plus concise en plus de\nrésoudre certaines limitations de l’API Selenium-RC. Selenium-WebDriver a été développé\npour mieux prendre en charge les pages Web dynamiques où des éléments d&#39;une page peuvent changer sans la page\nlui-même étant rechargé. L’objectif de WebDriver est de fournir une solution orientée objet bien conçue.\nAPI offrant une prise en charge améliorée des problèmes de test d&#39;applications Web avancés et avancés.","Comment WebDriver &quot;pilote-t-il&quot; le navigateur par rapport à Selenium-RC?\nSelenium-WebDriver appelle directement le navigateur en utilisant le support natif de chaque navigateur pour l’automatisation.\nLa manière dont ces appels directs sont effectués et les fonctionnalités qu’ils prennent en charge dépend du navigateur que vous utilisez.\nDes informations sur chaque ‘pilote de navigateur’ sont fournies plus loin dans ce chapitre.\nPour ceux qui sont familiers avec Selenium-RC, c&#39;est très différent de ce que vous avez l&#39;habitude de faire. Sélénium-RC\nfonctionné de la même manière pour chaque navigateur pris en charge. Il &quot;injecte&quot; des fonctions javascript dans le navigateur\nlorsque le navigateur a été chargé et a ensuite utilisé son javascript pour piloter l’AUT dans le navigateur.\nWebDriver n&#39;utilise pas cette technique. Encore une fois, il pilote le navigateur directement à l&#39;aide de son navigateur.\nsupport intégré pour l&#39;automatisation.","WebDriver et le Selenium-Server\nLe serveur Selenium peut être nécessaire ou non, selon l’utilisation que vous envisagez d’utiliser Selenium-WebDriver.\nSi votre navigateur et vos tests s&#39;exécutent tous sur le même ordinateur et que vos tests utilisent uniquement l&#39;API WebDriver,\nalors vous n&#39;avez pas besoin d&#39;exécuter le serveur Selenium; WebDriver exécutera le navigateur directement.\nCependant, il existe certaines raisons d&#39;utiliser Selenium-Server avec Selenium-WebDriver.","Vous utilisez Selenium-Grid pour répartir vos tests sur plusieurs machines ou machines virtuelles (VM).\nVous souhaitez vous connecter à un ordinateur distant doté d&#39;une version de navigateur particulière qui n&#39;est pas activée\nvotre machine actuelle.\nVous n&#39;utilisez pas les liaisons Java (c&#39;est-à-dire Python, C # ou Ruby) et souhaitez utiliser le pilote HtmlUnit","Configuration d&#39;un projet Selenium-WebDriver\nInstaller Selenium signifie configurer un projet dans un développement pour pouvoir écrire un programme en utilisant\nSélénium. Cela dépend de votre langage de programmation et de votre environnement de développement.","Java\nLe moyen le plus simple de configurer un projet Java Selenium 2.0 consiste à utiliser Maven. Maven téléchargera le\njava (la bibliothèque du client java Selenium 2.0) et toutes ses dépendances, et créera le\nprojet pour vous, en utilisant un fichier maven pom.xml (configuration du projet). Une fois que vous avez fait cela, vous\npouvez importer le projet maven dans votre IDE préféré, IntelliJ IDEA ou Eclipse.\nCommencez par créer un dossier contenant vos fichiers de projet Selenium. Ensuite, pour utiliser Maven, vous avez besoin d’un\nfichier pom.xml. Cela peut être créé avec un éditeur de texte. Nous n’enseignerons pas le\ndes détails sur les fichiers pom.xml ou sur l&#39;utilisation de Maven car il existe déjà d&#39;excellentes références à ce sujet.\nVotre fichier pom.xml ressemblera à ceci. Créez ce fichier dans le dossier que vous avez créé pour\nvotre projet.","&lt;projet xmlns =&quot;http://maven.apache.org/POM/4.0.0&quot;\n                 xmlns: xsi =&quot;http://www.w3.org/2001/XMLSchema-instance&quot;\n                 xsi: schemaLocation =&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&gt;\n        4.0.0\n        MySel20Proj\n        MySel20Proj\n        1,0\n        \n            \n                org.seleniumhq.selenium\n                sélénium-serveur\n                3.0.1","Assurez-vous de spécifier la version la plus récente. Au moment de la rédaction, la version indiquée ci-dessus était\nles plus courants, cependant, des rejets fréquents ont eu lieu immédiatement après la publication de Selenium 2.0.\nConsultez la page de téléchargement de Maven pour connaître la version actuelle et éditez la dépendance ci-dessus en conséquence.\nMaintenant, à partir d&#39;une ligne de commande, CD dans le répertoire du projet et exécutez maven comme suit.\nCela téléchargera Selenium et toutes ses dépendances et les ajoutera au projet.\nEnfin, importez le projet dans votre environnement de développement préféré. Pour ceux qui ne connaissent pas\navec cela, nous avons fourni une annexe qui montre cela.\nImporter un projet maven dans IntelliJ IDEA.\nImporter un projet maven dans Eclipse.","C #\nA partir de Selenium 2.2.0, les liaisons C # sont distribuées sous la forme d’un ensemble de dll signées avec d’autres\ndépendance dlls. Avant la version 2.2.0, toutes les dll de Selenium n’étaient pas signées.\nPour inclure Selenium dans votre projet, téléchargez simplement la dernière\nfichier zip sélénium-dotnet de http://selenium-release.storage.googleapis.com/index.html.\nSi vous utilisez Windows Vista ou supérieur, vous devez débloquer le fichier zip avant\nDécompressez-le: Faites un clic droit sur le fichier zip, cliquez sur «Propriétés», cliquez sur «Débloquer»\net cliquez sur “OK”.\nDécompressez le contenu du fichier zip et ajoutez une référence à chacun des fichiers décompressés.\nDLL à votre projet dans Visual Studio (ou votre IDE de choix).\nPaquets officiels NuGet:\nRC\nWebDriver\nWebDriverBackedSelenium\nSoutien","Python\nSi vous utilisez Python pour l’automatisation des tests, vous êtes probablement déjà familiarisé avec le développement.\nen Python. Pour ajouter Selenium à votre environnement Python, exécutez la commande suivante à partir de\nune ligne de commande.\nPip nécessite l&#39;installation de pip. Pip a également une dépendance.\nsur setuptools.\nL’enseignement du développement Python lui-même dépasse le cadre de ce document, mais il existe de nombreux\nLes ressources sur Python et les développeurs potentiels de votre organisation peuvent vous aider à vous mettre à niveau.","Rubis\nSi vous utilisez Ruby pour l’automatisation des tests, vous êtes probablement déjà familiarisé avec le développement.\nen rubis. Pour ajouter Selenium à votre environnement Ruby, exécutez la commande suivante à partir de\nune ligne de commande.","bijou installer sélénium-webdriver","L’enseignement du développement de Ruby lui-même dépasse le cadre de ce document, mais il existe de nombreuses\nLes ressources sur Ruby et les développeurs potentiels de votre organisation peuvent vous aider à vous mettre à niveau.","Perl\nLes liaisons Perl sont fournies par des tiers. Veuillez vous reporter à la documentation correspondante pour savoir comment\ninstaller / commencer. Il existe une liaison Perl connue à ce jour.","JavaScript\nSi vous utilisez node.js pour développer votre application, le projet sélénium fournit des liaisons Javascript sur npm.\nInstallez les liaisons Javascript avec npm:","npm installer sélénium-webdriver","Vous pouvez trouver la documentation de l&#39;API ici.","Migration de Selenium 1.0\nPour ceux qui ont déjà écrit des suites de tests en utilisant Selenium 1.0, nous avons fourni des conseils sur la façon de\nmigrez votre code existant vers Selenium 2.0. Simon Stewart, développeur principal de Selenium 2.0,\na écrit un article sur la migration de Selenium 1.0. Nous avons inclus cela en annexe.\nMigration de Selenium RC vers Selenium WebDriver","Présentation de l&#39;API Selenium-WebDriver par exemple\nWebDriver est un outil permettant d’automatiser le test d’applications Web, en particulier\npour vérifier qu&#39;ils fonctionnent comme prévu. Son objectif est de fournir une API conviviale\nfacile à explorer et à comprendre, plus facile à utiliser que l&#39;API Selenium-RC (1.0),\nce qui aidera à rendre vos tests plus faciles à\nlire et maintenir. Il n’est lié à aucun cadre de test particulier, il peut donc\nêtre utilisé aussi bien dans un projet de test unitaire ou à partir d’une ancienne méthode «principale».\nCette section présente l’API de WebDriver et vous aide à commencer à devenir\nfamilier avec elle. Commencez par configurer un projet WebDriver si vous ne l’avez pas déjà fait.\nCeci a été décrit dans la section précédente, Configuration d&#39;un projet Selenium-WebDriver.\nUne fois votre projet configuré, vous pouvez voir que WebDriver agit comme n&#39;importe quelle bibliothèque normale:\nentièrement autonome, et vous n’avez généralement pas besoin de vous souvenir de commencer\nprocessus supplémentaires ou exécuter les programmes d&#39;installation avant de l&#39;utiliser, par opposition au serveur proxy\navec Selenium-RC.\nRemarque: des étapes supplémentaires sont nécessaires pour utiliser ChromeDriver, Opera Driver, Android Driver.\net pilote iOS\nVous êtes maintenant prêt à écrire du code. Voici un moyen facile de commencer\nexemple, qui recherche le terme &quot;Fromage&quot; sur Google, puis affiche le\ntitre de la page de résultats sur la console.","paquet org.openqa.selenium.example;","importation org.openqa.selenium.By;\nimportation org.openqa.selenium.WebDriver;\nimportation org.openqa.selenium.WebElement;\nimportation org.openqa.selenium.firefox.FirefoxDriver;\nimportation org.openqa.selenium.support.ui.ExpectedCondition;\nimportation org.openqa.selenium.support.ui.WebDriverWait;","Publique classe Selenium2Example  \n    Publique statique vide principale(Chaîne[] args) \n        // Créer une nouvelle instance du pilote Firefox\n        // Notez que le reste du code repose sur l&#39;interface, \n        // pas la mise en œuvre.\n        WebDriver chauffeur = Nouveau FirefoxDriver();","// Et maintenant, utilisez ceci pour visiter Google\n        chauffeur.obtenir(&quot;http://www.google.com&quot;)\n        // Alternativement, la même chose peut être faite comme ça\n        // driver.navigate (). to (&quot;http://www.google.com&quot;);","// Trouver l&#39;élément de saisie de texte par son nom\n        WebElement élément = chauffeur.findElement(Par.prénom(&quot;q&quot;));","// Entrez quelque chose à rechercher\n        élément.sendKeys(&quot;Fromage!&quot;)","// Soumettez maintenant le formulaire. WebDriver trouvera la forme pour nous à partir de l&#39;élément\n        élément.soumettre();","// Vérifier le titre de la page\n        Système.en dehors.imprimer(&quot;Le titre de la page est:&quot; + chauffeur.getTitle());\n        \n        // La recherche de Google est rendue dynamiquement avec JavaScript.\n        // Attend le chargement de la page, délai d&#39;expiration après 10 secondes\n        (Nouveau WebDriverWait(chauffeur, dix)).jusqu&#39;à ce que(Nouveau Condition attendue&lt;Booléen&gt; () \n            Publique Booléen appliquer(WebDriver ré) \n                revenir ré.getTitle()toLowerCase()commence avec(&quot;fromage!&quot;)\n            \n        );","// devrait voir: &quot;cheese! - Google Search&quot;\n        Système.en dehors.imprimer(&quot;Le titre de la page est:&quot; + chauffeur.getTitle());\n        \n        // Fermer le navigateur\n        chauffeur.quitter();","en utilisant OpenQA.Selenium;\nen utilisant OpenQA.Selenium.Firefox;","// Requiert une référence à WebDriver.Support.dll\nen utilisant OpenQA.Selenium.Support.UI;","classe GoogleSuggest","statique vide Principale(chaîne[] args)\n    \n        // Crée une nouvelle instance du pilote Firefox.\n        // Notez qu&#39;il est encapsulé dans une clause using afin que le navigateur soit fermé \n        // et le WebDriver est disposé (même face aux exceptions).","// Notez également que le reste du code repose sur l&#39;interface, \n        // pas la mise en œuvre.","// Notez également que d&#39;autres pilotes (InternetExplorerDriver,\n        // ChromeDriver, etc.) nécessitera une configuration supplémentaire \n        // avant que cet exemple fonctionne. Voir les pages wiki pour le\n        // pilotes individuels sur http://code.google.com/p/selenium/wiki\n        // pour plus d&#39;informations.\n        en utilisant (IWebDriver chauffeur = Nouveau FirefoxDriver())\n        \n            // Remarque la navigation est légèrement différente de la version Java\n            // C&#39;est parce que &#39;get&#39; est un mot clé en C #\n            chauffeur.Naviguer()GoToUrl(&quot;http://www.google.com/&quot;)\n    \n            // Trouver l&#39;élément de saisie de texte par son nom\n            IWebElement question = chauffeur.FindElement(Par.prénom(&quot;q&quot;));\n    \n            // Entrez quelque chose à rechercher\n            question.SendKeys(&quot;Fromage&quot;)\n    \n            // Soumettez maintenant le formulaire. WebDriver trouvera la forme pour nous à partir de l&#39;élément\n            question.Soumettre();\n    \n            // La recherche de Google est rendue dynamiquement avec JavaScript.\n            // Attend le chargement de la page, délai d&#39;expiration après 10 secondes\n            var attendre = Nouveau WebDriverWait(chauffeur, TimeSpan.À partir de secondes(dix));\n            attendre.Jusqu&#39;à ce que(ré =&gt; ré.Titre.Commence avec(&quot;fromage&quot;, Comparaison de chaînes.OrdinalIgnoreCase));\n    \n            // devrait voir: &quot;Cheese - Google Search&quot; (pour une locale anglaise)\n            Console.WriteLine(&quot;Le titre de la page est:&quot; + chauffeur.Titre)","de sélénium importation webdriver\nde sélénium.common.exceptions importation TimeoutException\nde selenium.webdriver.support.ui importation WebDriverWait # disponible depuis 2.4.0\nde selenium.webdriver.support importation conditions_attendues comme CE # disponible depuis 2.26.0","# Créer une nouvelle instance du pilote Firefox\nchauffeur = webdriver.Firefox()","# aller à la page d&#39;accueil de google\nchauffeur.obtenir(&quot;http://www.google.com&quot;)","# la page est ajaxy donc le titre est à l&#39;origine ceci:\nimpression chauffeur.Titre","# trouve que l&#39;attribut name est q (le champ de recherche google)\ninputElement = chauffeur.find_element_by_name(&quot;q&quot;)","# tapez dans la recherche\ninputElement.send_keys(&quot;fromage!&quot;)","# soumettre le formulaire (bien que google recherche automatiquement maintenant sans soumettre)\ninputElement.soumettre()","essayer:\n    # nous devons attendre que la page se rafraîchit, la dernière chose qui semble avoir été mise à jour est le titre\n    WebDriverWait(chauffeur, dix).jusqu&#39;à ce que(CE.title_contains(&quot;fromage!&quot;))","# Vous devriez voir &quot;fromage! - Recherche Google&quot;\n    impression chauffeur.Titre","enfin:\n    chauffeur.quitter()","exiger &#39;rubygems&#39;\nexiger &#39;sélénium-webdriver&#39;","chauffeur = Sélénium::WebDriver.pour : firefox\nchauffeur.obtenir &quot;http://google.com&quot;","élément = chauffeur.find_element :prénom =&gt; &quot;q&quot;\nélément.send_keys &quot;Fromage!&quot;\nélément.soumettre","met &quot;Le titre de la page est #driver.title &quot;","attendre = Sélénium::WebDriver::Attendre.Nouveau(:temps libre =&gt; dix)\nattendre.jusqu&#39;à ce que  chauffeur.Titre.downcase.Commencer avec? &quot;fromage!&quot;","met &quot;Le titre de la page est #driver.title &quot;\nchauffeur.quitter","var chauffeur = Nouveau webdriver.Constructeur()construire();\nchauffeur.obtenir(&quot;http://www.google.com&quot;)","var élément = chauffeur.findElement(webdriver.Par.prénom(&#39;q&#39;));\nélément.sendKeys(&#39;Fromage!&#39;)\nélément.soumettre();","chauffeur.getTitle()puis(une fonction(Titre) \n  console.bûche(&#39;Le titre de la page est:&#39; + Titre)\n);","chauffeur.attendre(une fonction() \n  revenir chauffeur.getTitle()puis(une fonction(Titre) \n    revenir Titre.toLowerCase()lastIndexOf(&#39;fromage!&#39;, 0) === 0;\n  );\n, 3000)","chauffeur.getTitle()puis(une fonction(Titre) \n  console.bûche(&#39;Le titre de la page est:&#39; + Titre)\n);","chauffeur.quitter();","utilisation Sélénium :: Télécommande :: Pilote;","# Créer une nouvelle instance du pilote\nmon conducteur $ = Sélénium :: Télécommande :: Pilote-&gt;Nouveau;","# Aller à la page d&#39;accueil de Google\nconducteur $-&gt;obtenir(&quot;http://www.google.com&quot;)","# Imprimer le titre de la page d&#39;origine\nmon $ title = conducteur $-&gt;get_title();\nimpression &quot;$ title  n&quot;;","# Trouver l&#39;élément dont l&#39;attribut name est q (champ de recherche Google)\nmon $ inputElement = conducteur $-&gt;find_element(&quot;q&quot;, &quot;prénom&quot;)","# tapez dans la recherche\n$ inputElement-&gt;send_keys(&quot;fromage!&quot;)","# soumettre le formulaire (bien que google recherche automatiquement maintenant sans soumettre)\n$ inputElement-&gt;soumettre();","# Définissez le délai d&#39;expiration de la recherche d&#39;éléments sur 10 secondes (0 par défaut)\nconducteur $-&gt;set_implicit_wait_timeout(10000)\n# puis utilisez XPath pour rechercher un titre de page contenant du fromage!\nconducteur $-&gt;find_element(&quot;/ html / head / title[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'cheese!')]&quot;)","# Vous devriez voir &quot;fromage! - Recherche Google&quot;\n$ title = conducteur $-&gt;get_title();\nimpression &quot;$ title  n&quot;;","conducteur $-&gt;quitter();","Dans les prochaines sections, vous en apprendrez plus sur l’utilisation de WebDriver pour des applications\ntelles que la navigation en avant et en arrière dans l’historique de votre navigateur, et comment\ntester des sites Web qui utilisent des cadres et des fenêtres. Nous fournissons également un plus\ndiscussions approfondies et exemples.","Commandes et opérations de l&#39;API Selenium-WebDriver","Aller chercher une page\nLa première chose que vous souhaiterez probablement faire avec WebDriver est d’accéder à une page.\nLa façon habituelle de faire ceci est d&#39;appeler “get”:","chauffeur.obtenir(&quot;http://www.google.com&quot;)","chauffeur.URL = &quot;http://www.google.com&quot;;","chauffeur.obtenir &quot;http://www.google.com&quot;","chauffeur.obtenir(&quot;http://www.google.com&quot;)","conducteur $-&gt;obtenir(&quot;http://www.google.com&quot;)","chauffeur.obtenir(&quot;http://www.google.com&quot;)","Dépend de plusieurs facteurs, y compris la combinaison système d&#39;exploitation / navigateur,\nWebDriver peut attendre ou ne pas attendre le chargement de la page. Dans certaines circonstances,\nWebDriver peut rendre le contrôle avant que le chargement de la page soit terminé ou même commencé.\nPour assurer la robustesse, vous devez attendre que le ou les éléments existent dans la page à l&#39;aide de\nAttentes explicites et implicites.","Localisation d&#39;éléments d&#39;interface utilisateur (WebElements)\nLa localisation d&#39;éléments dans WebDriver peut être effectuée sur l&#39;instance WebDriver elle-même ou sur un WebElement.\nChacune des liaisons de langue expose une méthode «Trouver élément» et «Trouver des éléments». L&#39;ancien retour\nun objet WebElement correspondant à la requête et lève une exception si un tel élément est introuvable.\nCe dernier renvoie une liste de WebElements, éventuellement vide si aucun élément DOM ne correspond à la requête.\nLes méthodes &quot;Rechercher&quot; prennent un objet de requête ou de localisateur appelé &quot;Par&quot;. Les stratégies «par» sont énumérées ci-dessous.","Par ID\nC&#39;est le moyen le plus efficace et préféré de localiser un élément. Pièges courants que les développeurs d&#39;interface utilisateur\nmake est d&#39;avoir des identifiants non uniques sur une page ou de générer automatiquement l&#39;identifiant, les deux doivent être évités. Une classe\nsur un élément html est plus approprié qu&#39;un identifiant généré automatiquement.\nExemple de recherche d&#39;un élément ressemblant à ceci:","&lt;div identifiant=&quot;coolestWidgetEvah&quot;&gt;...&lt;/div&gt;","WebElement élément = chauffeur.findElement(Par.identifiant(&quot;coolestWidgetEvah&quot;));","IWebElement élément = chauffeur.FindElement(Par.Id(&quot;coolestWidgetEvah&quot;));","élément = chauffeur.find_element(: id, &quot;coolestWidgetEvah&quot;)","élément = chauffeur.find_element_by_id(&quot;coolestWidgetEvah&quot;)","ou","de selenium.webdriver.common.by importation Par\nélément = chauffeur.find_element(par=Par.ID, valeur=&quot;coolestWidgetEvah&quot;)","élément $ = conducteur $-&gt;find_element(&#39;coolestWidgetEvah&#39;,&#39;id&#39;)","var élément = chauffeur.findElement(Par.identifiant(&#39;coolestWidgetEvah&#39;));","Par nom de classe\n“Classe” dans ce cas fait référence à l&#39;attribut sur l&#39;élément DOM. Souvent, dans la pratique, il y a\nde nombreux éléments DOM avec le même nom de classe, la recherche de plusieurs éléments devient alors la solution la plus pratique.\noption sur la recherche du premier élément.\nExemple de recherche d&#39;un élément ressemblant à ceci:","&lt;div classe=&quot;fromage&quot;&gt; &lt;envergure&gt;Cheddar&lt;/envergure&gt; &lt;/div&gt; &lt;div classe=&quot;fromage&quot;&gt; &lt;envergure&gt;Gouda&lt;/envergure&gt; &lt;/div&gt;","liste&lt;WebElement&gt; les fromages = chauffeur.findElements(Par.nom du cours(&quot;fromage&quot;));","IListe&lt;IWebElement&gt; les fromages = chauffeur.FindElements(Par.Nom du cours(&quot;fromage&quot;));","les fromages = chauffeur.find_elements(:nom du cours, &quot;fromage&quot;)","ou","les fromages = chauffeur.find_elements(:classe, &quot;fromage&quot;)","les fromages = chauffeur.find_elements_by_class_name(&quot;fromage&quot;)","ou","de selenium.webdriver.common.by importation Par\nles fromages = chauffeur.find_elements(Par.NOM DU COURS, &quot;fromage&quot;)","@les fromages = conducteur $-&gt;find_elements(&#39;fromage&#39;, &#39;classe&#39;)","chauffeur.findElements(Par.nom du cours(&quot;fromage&quot;))\n.puis(les fromages =&gt; console.bûche(les fromages.longueur));","Par nom de tag\nLe nom de la balise DOM de l&#39;élément.\nExemple de recherche d&#39;un élément ressemblant à ceci:","&lt;iframe src=&quot;...&quot;&gt; &lt;/iframe&gt;","WebElement Cadre = chauffeur.findElement(Par.tagName(&quot;iframe&quot;));","IWebElement Cadre = chauffeur.FindElement(Par.TagName(&quot;iframe&quot;));","Cadre = chauffeur.find_element(: tag_name, &quot;iframe&quot;)","Cadre = chauffeur.find_element_by_tag_name(&quot;iframe&quot;)","ou","de selenium.webdriver.common.by importation Par\nCadre = chauffeur.find_element(Par.TAG_NAME, &quot;iframe&quot;)","$ frame = conducteur $-&gt;find_element(&#39;iframe&#39;, &#39;tag_name&#39;)","var Cadre = chauffeur.findElement(Par.tagName(&#39;iframe&#39;));","De nom\nRecherchez l&#39;élément d&#39;entrée avec l&#39;attribut name correspondant.\nExemple de recherche d&#39;un élément ressemblant à ceci:","&lt;contribution prénom=&quot;fromage&quot; type=&quot;texte&quot;/&gt;","WebElement fromage = chauffeur.findElement(Par.prénom(&quot;fromage&quot;));","IWebElement fromage = chauffeur.FindElement(Par.prénom(&quot;fromage&quot;));","fromage = chauffeur.find_element(:prénom, &quot;fromage&quot;)","fromage = chauffeur.find_element_by_name(&quot;fromage&quot;)","ou","de selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.PRÉNOM, &quot;fromage&quot;)","$ fromage = conducteur $-&gt;find_element(&#39;fromage&#39;, &#39;prénom&#39;)","var fromage = chauffeur.findElement(Par.prénom(&#39;fromage&#39;));","Par lien texte\nRecherchez l&#39;élément de lien avec le texte visible correspondant.\nExemple de recherche d&#39;un élément ressemblant à ceci:","&lt;une href=&quot;http://www.google.com/search?q=cheese&quot;&gt;fromage&lt;/une&gt;&gt;","WebElement fromage = chauffeur.findElement(Par.linkText(&quot;fromage&quot;));","IWebElement fromage = chauffeur.FindElement(Par.LinkText(&quot;fromage&quot;));","fromage = chauffeur.find_element(: link_text, &quot;fromage&quot;)","ou","fromage = chauffeur.find_element(:lien, &quot;fromage&quot;)","fromage = chauffeur.find_element_by_link_text(&quot;fromage&quot;)","ou","de selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.LINK_TEXT, &quot;fromage&quot;)","$ fromage = conducteur $-&gt;find_element(&#39;fromage&#39;, &#39;link_text&#39;)","var fromage = chauffeur.findElement(Par.linkText(&#39;fromage&#39;));","Par texte de lien partiel\nRecherchez l&#39;élément de lien avec du texte visible correspondant partiellement.\nExemple de recherche d&#39;un élément ressemblant à ceci:","&lt;une href=&quot;http://www.google.com/search?q=cheese&quot;&gt;recherche de fromage&lt;/une&gt;&gt;","WebElement fromage = chauffeur.findElement(Par.partialLinkText(&quot;fromage&quot;));","IWebElement fromage = chauffeur.FindElement(Par.PartialLinkText(&quot;fromage&quot;));","fromage = chauffeur.find_element(: partial_link_text, &quot;fromage&quot;)","fromage = chauffeur.find_element_by_partial_link_text(&quot;fromage&quot;)","ou","de selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.PARTIAL_LINK_TEXT, &quot;fromage&quot;)","$ fromage = conducteur $-&gt;find_element(&#39;fromage&#39;, &#39;partial_link_text&#39;)","var fromage = chauffeur.findElement(Par.partialLinkText(&#39;fromage&#39;));","Par CSS\nComme son nom l&#39;indique, il s&#39;agit d&#39;une stratégie de localisation par css. Prise en charge du navigateur natif\nest utilisé par défaut, veuillez donc vous référer aux sélecteurs CSS de w3c pour obtenir une liste des sélecteurs CSS disponibles. Si un navigateur n&#39;a pas\nsupport natif pour les requêtes css, alors Sizzle est utilisé. IE 6,7 et FF3,0\nutilise actuellement Sizzle comme moteur de requête css.\nAttention, tous les navigateurs n&#39;ont pas été créés égaux. Certains CSS pouvant fonctionner dans une version peuvent ne pas fonctionner.\nen autre.\nExemple de trouver le fromage ci-dessous:","&lt;div identifiant=&quot;aliments&quot;&gt; &lt;envergure classe=&quot;laitier&quot;&gt;Lait&lt;/envergure&gt; &lt;envergure classe=&quot;laiterie vieillie&quot;&gt;fromage&lt;/envergure&gt; &lt;/div&gt;","WebElement fromage = chauffeur.findElement(Par.cssSelector(&quot;#food span.dairy.aged&quot;));","IWebElement fromage = chauffeur.FindElement(Par.CssSélecteur(&quot;#food span.dairy.aged&quot;));","fromage = chauffeur.find_element(: css, &quot;#food span.dairy.aged&quot;)","fromage = chauffeur.find_element_by_css_selector(&quot;#food span.dairy.aged&quot;)","ou","de selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.CSS_SELECTOR, &quot;#food span.dairy.aged&quot;)","$ fromage = conducteur $-&gt;find_element(&#39;#food span.dairy.aged&#39;, &#39;css&#39;)","var fromage = chauffeur.findElement(Par.css(&#39;#food span.dairy.aged&#39;));","Par XPath\nÀ un niveau élevé, WebDriver utilise les fonctionnalités XPath natives d’un navigateur partout\npossible. Sur les navigateurs qui ne prennent pas en charge XPath en natif, nous avons\nfourni notre propre mise en œuvre. Cela peut conduire à un comportement inattendu\nà moins que vous ne connaissiez les différences entre les différents moteurs XPath.\nCeci est un petit résumé, donc pour le morceau de HTML suivant:","&lt;contribution type=&quot;texte&quot; prénom=&quot;Exemple&quot; /&gt;\n&lt;CONTRIBUTION type=&quot;texte&quot; prénom=&quot;autre&quot; /&gt;","liste&lt;WebElement&gt; contributions = chauffeur.findElements(Par.xpath(&quot;//contribution&quot;));","IListe&lt;IWebElement&gt; contributions = chauffeur.FindElements(Par.XPath(&quot;//contribution&quot;));","contributions = chauffeur.find_elements(: xpath, &quot;//contribution&quot;)","contributions = chauffeur.find_elements_by_xpath(&quot;//contribution&quot;)","ou","de selenium.webdriver.common.by importation Par\ncontributions = chauffeur.find_elements(Par.XPATH, &quot;//contribution&quot;)","@contributions = conducteur $-&gt;find_elements(&#39;//contribution&#39;)","chauffeur.findElements(Par.xpath(&quot;//contribution&quot;))\n.puis(les fromages =&gt; console.bûche(les fromages.longueur));","Le nombre de correspondances suivantes sera trouvé\nParfois, les éléments HTML n&#39;ont pas besoin d&#39;attributs pour être explicitement déclarés\nparce qu&#39;ils vont par défaut aux valeurs connues. Par exemple, la balise «input» ne\npas besoin de l’attribut «type» car il utilise par défaut «text». La règle de\npouce lorsque vous utilisez xpath dans WebDriver est que vous ne devrait pas attendez-vous à pouvoir\nfaire correspondre à ces attributs implicites.","Utiliser JavaScript\nVous pouvez exécuter du javascript arbitraire pour trouver un élément et tant que vous retournez un élément DOM,\nil sera automatiquement converti en objet WebElement.\nExemple simple sur une page sur laquelle jQuery est chargé:","WebElement élément = (WebElement) ((JavascriptExecutor)chauffeur).executeScript(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)","IWebElement élément = (IWebElement) ((IJavaScriptExecutor)chauffeur).ExecuteScript(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)","élément = chauffeur.execute_script(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)","élément = chauffeur.execute_script(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)","élément = conducteur $-&gt;execute_script(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)","Trouver tous les éléments d&#39;entrée pour chaque étiquette sur une page:","liste&lt;WebElement&gt; Étiquettes = chauffeur.findElements(Par.tagName(&quot;étiquette&quot;));\nliste&lt;WebElement&gt; contributions = (liste&lt;WebElement&gt;) ((JavascriptExecutor)chauffeur).executeScript(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, Étiquettes)","IListe&lt;IWebElement&gt; Étiquettes = chauffeur.FindElements(Par.TagName(&quot;étiquette&quot;));\nIListe&lt;IWebElement&gt; contributions = (IListe&lt;IWebElement&gt;) ((IJavaScriptExecutor)chauffeur).ExecuteScript(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, Étiquettes)","Étiquettes = chauffeur.find_elements(: tag_name, &quot;étiquette&quot;)\ncontributions = chauffeur.execute_script(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, Étiquettes)","Étiquettes = chauffeur.find_elements_by_tag_name(&quot;étiquette&quot;)\ncontributions = chauffeur.execute_script(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, Étiquettes)","mon @Étiquettes = conducteur $-&gt;find_elements(&#39;étiquette&#39;, &#39;tag_name&#39;)\nmon $ entrées = conducteur $-&gt;execute_script(&quot;var labels = arguments, input = []; pour (var i = 0; i &lt;labels.length; i ++) inputs.push (document.getElementById (labels[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, @Étiquettes)","Obtenir des valeurs de texte\nLes utilisateurs souhaitent souvent récupérer la valeur innerText contenue dans un élément. Cela renvoie une valeur de chaîne unique. Notez que cela ne fera que renvoyer le texte visible affiché sur la page.","WebElement élément = chauffeur.findElement(Par.identifiant(&quot;elementID&quot;));\nélément.getText();","IWebElement élément = chauffeur.findElement(Par.identifiant(&quot;elementID&quot;));\nélément.Texte;","élément = chauffeur.find_element : id =&gt; &quot;element_id&quot;\nélément.texte","élément = chauffeur.find_element_by_id(&quot;element_id&quot;)\nélément.texte","var element = driver.findElement (By.id (&#39;elementID&#39;));\nelement.getText (). then (text =&gt; console.log (`Text is $ text`));","Entrée utilisateur &#8211; Remplir des formulaires\nNous avons déjà vu comment saisir du texte dans une zone de texte ou un champ de texte, mais\nsur les autres éléments? Vous pouvez &quot;basculer&quot; l’état des cases à cocher, et vous\npouvez cliquer sur «cliquer» pour définir quelque chose comme une balise OPTION sélectionnée. Transaction\navec les balises SELECT n’est pas si mal:","WebElement sélectionner = chauffeur.findElement(Par.tagName(&quot;sélectionner&quot;));\nliste&lt;WebElement&gt; toutes les options = sélectionner.findElements(Par.tagName(&quot;option&quot;));\npour (WebElement option : toutes les options) \n    Système.en dehors.imprimer(Chaîne.format(&quot;La valeur est:% s&quot;, option.obtenirAttribuer(&quot;valeur&quot;)));\n    option.Cliquez sur();","IWebElement sélectionner = chauffeur.FindElement(Par.TagName(&quot;sélectionner&quot;));\nIListe&lt;IWebElement&gt; toutes les options = sélectionner.FindElements(Par.TagName(&quot;option&quot;));\npour chaque (IWebElement option dans toutes les options)","Console.WriteLine(&quot;La valeur est: &quot; + option.GetAttribute(&quot;valeur&quot;));\n    option.Cliquez sur();","sélectionner = chauffeur.find_element(: tag_name, &quot;sélectionner&quot;)\ntoutes les options = sélectionner.find_elements(: tag_name, &quot;option&quot;)\ntoutes les options.chaque faire |option|\n  met &quot;La valeur est: &quot; + option.attribut(&quot;valeur&quot;)\n  option.Cliquez sur\nfin","sélectionner = chauffeur.find_element_by_tag_name(&quot;sélectionner&quot;)\ntoutes les options = sélectionner.find_elements_by_tag_name(&quot;option&quot;)\npour option dans toutes les options:\n    impression &quot;La valeur est: &quot; + option.get_attribute(&quot;valeur&quot;)\n    option.Cliquez sur()","$ select = conducteur $-&gt;find_element(&#39;sélectionner&#39;, &#39;tag_name&#39;)\n@toutes les options = conducteur $-&gt;find_child_element($ select, &quot;option&quot;, &#39;tag_name&#39;)\npour chaque option $ (@toutes les options) \n    impression &quot;La valeur est: &quot;.option $-&gt;get_attribute(&quot;valeur&quot;).&quot; n&quot;;\n    option $-&gt;Cliquez sur();","Ceci trouvera le premier élément “SELECT” sur la page et parcourra chaque\nà tour de rôle, en affichant leurs valeurs et en les sélectionnant à tour de rôle.\nComme vous le constaterez, ce n’est pas le moyen le plus efficace de traiter avec SELECT\néléments. Les classes de support de WebDriver comprennent une classe appelée «Select», qui\nfournit des méthodes utiles pour interagir avec ceux-ci.","Sélectionner sélectionner = Nouveau Sélectionner(chauffeur.findElement(Par.tagName(&quot;sélectionner&quot;)));\nsélectionner.tout déselectionner();\nsélectionner.selectByVisibleText(&quot;Edam&quot;)","SelectElement sélectionner = Nouveau SelectElement(chauffeur.FindElement(Par.TagName(&quot;sélectionner&quot;)));\nsélectionner.Tout déselectionner();\nsélectionner.SelectByText(&quot;Edam&quot;)","# disponible depuis 2.14\n    sélectionner = Sélénium::WebDriver::Soutien::Sélectionner.Nouveau(chauffeur.find_element(: tag_name, &quot;sélectionner&quot;))\n    sélectionner.tout déselectionner()\n    sélectionner.select_by(:texte, &quot;Edam&quot;)","# disponible depuis 2.12\nde selenium.webdriver.support.ui importation Sélectionner\nsélectionner = Sélectionner(chauffeur.find_element_by_tag_name(&quot;sélectionner&quot;))\nsélectionner.tout déselectionner()\nsélectionner.select_by_visible_text(&quot;Edam&quot;)","Ceci désélectionnera toutes les OPTIONS du premier SELECT sur la page, puis\nsélectionnez l&#39;OPTION avec le texte affiché «Edam».\nUne fois le formulaire rempli, vous souhaiterez probablement le soumettre. Un\nPour ce faire, recherchez le bouton «Soumettre» et cliquez dessus:","chauffeur.findElement(Par.identifiant(&quot;soumettre&quot;)).Cliquez sur();","chauffeur.FindElement(Par.Id(&quot;soumettre&quot;)).Cliquez sur();","chauffeur.find_element(: id, &quot;soumettre&quot;).Cliquez sur","chauffeur.find_element_by_id(&quot;soumettre&quot;).Cliquez sur()","conducteur $-&gt;find_element(&#39;soumettre&#39;,&#39;id&#39;)-&gt;Cliquez sur()","chauffeur.findElement(Par.identifiant(&#39;soumettre&#39;).Cliquez sur();","WebDriver a aussi la méthode de commodité «submit» sur chaque élément.\nSi vous appelez cela sur un élément du formulaire, WebDriver remontera le DOM.\njusqu&#39;à ce qu&#39;il trouve le formulaire ci-joint et appelle ensuite soumettre à ce sujet. Si la\nl’élément n’est pas dans un formulaire, alors le NoSuchElementException    sera jeté:","Se déplacer entre Windows et les cadres\nCertaines applications Web ont plusieurs cadres ou plusieurs fenêtres. WebDriver prend en charge\nvous déplacer entre les fenêtres nommées en utilisant la méthode «switchTo»:","chauffeur.basculer vers()la fenêtre(&quot;windowName&quot;)","chauffeur.Basculer vers()La fenêtre(&quot;windowName&quot;)","chauffeur.basculer vers.la fenêtre(&quot;windowName&quot;)","chauffeur.basculer vers.la fenêtre(&quot;windowName&quot;)","conducteur $-&gt;switch_to_window(&quot;windowName&quot;)","chauffeur.basculer vers()la fenêtre(&#39;windowName&#39;)","Tous les appels à chauffeur    sera maintenant interprété comme étant dirigé vers le\nfenêtre particulière. Mais comment connaissez-vous le nom de la fenêtre? Regardez le\njavascript ou lien qui l&#39;a ouvert:","&lt;une href=&quot;quelque part.html&quot; cible=&quot;windowName&quot;&gt;Cliquez ici pour ouvrir une nouvelle fenêtre&lt;/une&gt;","Alternativement, vous pouvez passer un &quot;handle de fenêtre&quot; à &quot;switchTo (). Window ()&quot;\nméthode. Sachant cela, il est possible de parcourir toutes les fenêtres ouvertes comme ceci:","pour (Chaîne manipuler : chauffeur.getWindowHandles()) \n    chauffeur.basculer vers()la fenêtre(manipuler)","pour chaque (chaîne manipuler dans chauffeur.Poignées de fenêtre) \n    chauffeur.Basculer vers()La fenêtre(manipuler)","chauffeur.window_handles.chaque faire |manipuler|\n    chauffeur.switch_to.la fenêtre manipuler\nfin","pour manipuler dans chauffeur.window_handles:\n    chauffeur.switch_to.la fenêtre(manipuler)","$windows = $driver-&gt;get_window_handles()\nforeach $window (@$windows) \n    $driver-&gt;switch_to_window($window)","You can also switch from frame to frame (or into iframes):","chauffeur.switchTo().Cadre(&quot;frameName&quot;)","chauffeur.SwitchTo().Cadre(&quot;frameName&quot;)","chauffeur.switch_to.Cadre &quot;frameName&quot;","chauffeur.switch_to.Cadre(&quot;frameName&quot;)","$driver-&gt;switch_to_frame(&#39;frameName&#39;)","chauffeur.switchTo().Cadre(&#39;frameName&#39;)","Navigation: History and Location\nEarlier, we covered navigating to a page using the “get” command (\ndriver.get(&quot;http://www.example.com&quot;)    ou driver.Url=&quot;http://www.example.com&quot;    in C#).\nAs you’ve seen, WebDriver has a number of smaller, task-focused interfaces, and navigation is a useful task.\nBecause loading a page is such a fundamental requirement, the method to do this\nlives on the main WebDriver interface, but it’s simply a synonym to:","chauffeur.naviguer().à(&quot;http://www.example.com&quot;)","chauffeur.Navigate().GoToUrl(&quot;http://www.example.com&quot;)","chauffeur.naviguer.à &quot;http://www.example.com&quot;","chauffeur.obtenir(&quot;http://www.example.com&quot;)  # python doesn&#39;t have driver.navigate","$driver-&gt;naviguer(&#39;http://www.example.com&#39;)","chauffeur.naviguer().à(&#39;http://www.example.com&#39;)","To reiterate: “navigate().to()&quot; et &quot;get()” do exactly the same thing.\nOne’s just a lot easier to type than the other!\nThe “navigate” interface also exposes the ability to move backwards and forwards in your browser’s history:","chauffeur.naviguer().vers l&#39;avant();\nchauffeur.naviguer().retour();","chauffeur.Navigate().Vers l&#39;avant();\nchauffeur.Navigate().Retour();","chauffeur.naviguer.vers l&#39;avant\nchauffeur.naviguer.retour","chauffeur.vers l&#39;avant()\nchauffeur.retour()","chauffeur.naviguer().vers l&#39;avant();\nchauffeur.naviguer().retour();","Please be aware that this functionality depends entirely on the underlying\nnavigateur. It’s just possible that something unexpected may happen when you call\nthese methods if you’re used to the behaviour of one browser over another.","Cookies\nBefore we leave these next steps, you may be interested in understanding how to\nuse cookies. First of all, you need to be on the domain that the cookie will be\nvalid for. If you are trying to preset cookies before\nyou start interacting with a site and your homepage is large / takes a while to load\nan alternative is to find a smaller page on the site (typically the 404 page is small,\npar exemple. http://example.com/some404page).","// Go to the correct domain\nchauffeur.obtenir(&quot;http://www.example.com&quot;)","// Now set the cookie. This one&#39;s valid for the entire domain\nBiscuit biscuit = Nouveau Biscuit(&quot;key&quot;, &quot;value&quot;)\nchauffeur.gérer().addCookie(biscuit)","// And now output all the available cookies for the current URL\nEnsemble&lt;Biscuit&gt; allCookies = chauffeur.gérer().getCookies();\npour (Biscuit loadedCookie : allCookies) \n    Système.en dehors.imprimer(Chaîne.format(&quot;%s -&gt; %s&quot;, loadedCookie.getName(), loadedCookie.getValue()));","// You can delete cookies in 3 ways\n// By name\nchauffeur.gérer().deleteCookieNamed(&quot;CookieName&quot;)\n// By Cookie\nchauffeur.gérer().deleteCookie(loadedCookie)\n// Or all of them\nchauffeur.gérer().deleteAllCookies();","# Go to the correct domain\nchauffeur.obtenir(&quot;http://www.example.com&quot;)","# Now set the cookie. Here&#39;s one for the entire domain\n# the cookie name here is &#39;key&#39; and its value is &#39;value&#39;\nchauffeur.add_cookie(&#39;name&#39;:&#39;key&#39;, &#39;value&#39;:&#39;value&#39;, &#39;path&#39;:&#39;/&#39;)\n# additional keys that can be passed in are:\n# &#39;domain&#39; -&gt; String,\n# &#39;secure&#39; -&gt; Boolean,\n# &#39;expiry&#39; -&gt; Milliseconds since the Epoch it should expire.","# And now output all the available cookies for the current URL\npour biscuit dans chauffeur.get_cookies():\n    impression &quot;% s    -&gt; % s&quot; % (biscuit[[[[&#39;name&#39;], biscuit[[[[&#39;value&#39;])","# You can delete cookies in 2 ways\n# By name\nchauffeur.delete_cookie(&quot;CookieName&quot;)\n# Or all of them\nchauffeur.delete_all_cookies()","# Go to the correct domain\nchauffeur.obtenir &quot;http://www.example.com&quot;","# Now set the cookie. Here&#39;s one for the entire domain\n# the cookie name here is &#39;key&#39; and its value is &#39;value&#39;\nchauffeur.gérer.add_cookie(:name =&gt; &#39;key&#39;, :value =&gt; &#39;value&#39;)\n# additional keys that can be passed in are:\n# :path =&gt; String, :secure -&gt; Boolean, :expires -&gt; Time, DateTime, or seconds since epoch","# And now output all the available cookies for the current URL\nchauffeur.gérer.all_cookies.chaque \n    met &quot;#biscuit[[[[:name]    =&gt; #biscuit[[[[:value]&quot;","# You can delete cookies in 2 ways\n# By name\nchauffeur.gérer.delete_cookie &quot;CookieName&quot;\n# Or all of them\nchauffeur.gérer.delete_all_cookies","# Go to the correct domain\n$driver-&gt;obtenir(&quot;http://www.example.com&quot;)","# Now set the cookie. Here&#39;s one for the entire domain\n# the cookie name here is &#39;key&#39; and its value is &#39;value&#39;\n$driver-&gt;add_cookie(&#39;key&#39;, &#39;value&#39;, &#39;/&#39;, &#39;example.com&#39;, 0)\n# additional required inputs are path and domain\n# the final input secure is an optional boolean","# And now output all the available cookies for the current URL\nmon $cookies_ref = $driver-&gt;get_all_cookies(); # Returns reference to AoH\npour $cookie_ref (@$cookies_ref) \n    printf &quot;%s =&gt; %sn&quot;, $cookie_ref-&gt;prénom, $cookie_ref-&gt;valeur;","# You can delete cookies in 2 ways\n# By name\n$driver-&gt;delete_cookie_named(&quot;key&quot;)\n# Or all of them\n$driver-&gt;delete_all_cookies();","# Go to the correct domain\ndriver.get(&#39;http://www.example.com&#39;);","# Now set the basic cookie. Here&#39;s one for the entire domain\n# the cookie name here is &#39;key&#39; and its value is &#39;value&#39;\ndriver.manage().addCookie(name: &#39;cookie-1&#39;, value: &#39;cookieValue&#39;);","# And now output all the available cookies for the current URL\ndriver.manage().getCookies().then( (loadedCookies) =&gt;\n    for (let cookie in loadedCookies) \n    console.log(&#39;printing Cookies loaded : &#39;+cookie);\n    \n    );\n# You can delete cookies in 2 ways\n# By name\ndriver.manage().deleteCookie(&#39;cookie-1&#39;);\n# Or all of them\ndriver.manage().deleteAllCookies();","Changing the User Agent\nThis is easy with the Firefox Driver:","FirefoxProfile profil = Nouveau FirefoxProfile();\nprofil.addAdditionalPreference(&quot;general.useragent.override&quot;, &quot;some UA string&quot;)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)","var profil = Nouveau FirefoxProfile();\nprofil.SetPreference(&quot;general.useragent.override&quot;, &quot;some UA string&quot;)\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)","profil = Sélénium::WebDriver::Firefox::Profil.Nouveau\nprofil[[[[&#39;general.useragent.override&#39;] = &quot;some UA string&quot;\nchauffeur = Sélénium::WebDriver.pour :firefox, :profile =&gt; profil","profil = webdriver.FirefoxProfile()\nprofil.set_preference(&quot;general.useragent.override&quot;, &quot;some UA string&quot;)\nchauffeur = webdriver.Firefox(profil)","utilisation Selenium::Remote::Driver::Firefox::Profile;\nmon $profile = Selenium::Remote::Driver::Firefox::Profile-&gt;Nouveau;\n$profile-&gt;set_preference(&#39;general.useragent.overide&#39; =&gt; &quot;some UA string&quot;)\nmon $driver = Selenium::Remote::Driver-&gt;Nouveau(&#39;firefox_profile&#39; =&gt; $profile)","Drag And Drop\nHere’s an example of using the Actions class to perform a drag and drop.\nNative events are required to be enabled.","WebElement élément = chauffeur.findElement(Par.prénom(&quot;source&quot;));\nWebElement cible = chauffeur.findElement(Par.prénom(&quot;target&quot;));","(Nouveau actes(chauffeur)).dragAndDrop(élément, cible).effectuer();","IWebElement élément = chauffeur.FindElement(Par.prénom(&quot;source&quot;));\nIWebElement cible = chauffeur.FindElement(Par.prénom(&quot;target&quot;));\n(Nouveau actes(chauffeur)).DragAndDrop(élément, cible).Effectuer();","élément = chauffeur.find_element(:name =&gt; &#39;source&#39;)\ncible = chauffeur.find_element(:name =&gt; &#39;target&#39;)","chauffeur.action.drag_and_drop(élément, cible).effectuer","de selenium.webdriver.common.action_chains importation ActionChains\nélément = chauffeur.find_element_by_name(&quot;source&quot;)\ncible =  chauffeur.find_element_by_name(&quot;target&quot;)","ActionChains(chauffeur).drag_and_drop(élément, cible).effectuer()","Driver Specifics and Tradeoffs","Selenium-WebDriver’s Drivers\nWebDriver is the name of the key interface against which tests should be\nwritten, but there are several implementations. Ceux-ci inclus:","HtmlUnit Driver\nThis is currently the fastest and most lightweight implementation of WebDriver.\nAs the name suggests, this is based on HtmlUnit. HtmlUnit is a java based implementation\nof a WebBrowser without a GUI. For any language binding (other than java) the\nSelenium Server is required to use this driver.","Usage","WebDriver chauffeur = Nouveau HtmlUnitDriver();","IWebDriver chauffeur = Nouveau RemoteWebDriver(Nouveau Uri(&quot;http://127.0.0.1:4444/wd/hub&quot;),\n                                        DesiredCapabilities.HtmlUnit());","chauffeur = webdriver.Remote(&quot;http://localhost:4444/wd/hub&quot;, webdriver.DesiredCapabilities.HTMLUNIT.copie())","chauffeur = Sélénium::WebDriver.pour :remote, :url =&gt; &quot;http://localhost:4444/wd/hub&quot;, :desired_capabilities =&gt; :htmlunit","mon $driver = Selenium::Remote::Driver-&gt;Nouveau(browser_name =&gt; &#39;htmlunit&#39;, remote_server_addr =&gt; &#39;localhost&#39;, Port =&gt; &#39;4444&#39;)","Avantages","Fastest implementation of WebDriver\nA pure Java solution and so it is platform independent.\nSupports JavaScript","Les inconvénients","Emulates other browsers’ JavaScript behaviour (see below)","JavaScript in the HtmlUnit Driver\nNone of the popular browsers uses the JavaScript engine used by HtmlUnit\n(Rhino). If you test JavaScript using HtmlUnit the results may differ\nsignificantly from those browsers.\nWhen we say “JavaScript” we actually mean “JavaScript and the DOM”. Although\nthe DOM is defined by the W3C each browser has its own quirks and differences\nin their implementation of the DOM and in how JavaScript interacts with it.\nHtmlUnit has an impressively complete implementation of the DOM and has good\nsupport for using JavaScript, but it is no different from any other\nbrowser: it has its own quirks and differences from both the W3C standard and\nthe DOM implementations of the major browsers, despite its ability to mimic\nother browsers.\nWith WebDriver, we had to make a choice; do we enable HtmlUnit’s JavaScript\ncapabilities and run the risk of teams running into problems that only manifest\nthemselves there, or do we leave JavaScript disabled, knowing that there are\nmore and more sites that rely on JavaScript? We took the conservative approach,\nand by default have disabled support when we use HtmlUnit. With each release of\nboth WebDriver and HtmlUnit, we reassess this decision: we hope to enable\nJavaScript by default on the HtmlUnit at some point.","Enabling JavaScript\nIf you can’t wait, enabling JavaScript support is very easy:","HtmlUnitDriver chauffeur = Nouveau HtmlUnitDriver(vrai)","WebDriver chauffeur = Nouveau RemoteWebDriver(Nouveau Uri(&quot;http://127.0.0.1:4444/wd/hub&quot;),\n                       DesiredCapabilities.HtmlUnitWithJavaScript());","casquettes = Sélénium::WebDriver::Remote::Les capacités.htmlunit(:javascript_enabled =&gt; vrai)\nchauffeur = Sélénium::WebDriver.pour :remote, :url =&gt; &quot;http://localhost:4444/wd/hub&quot;, :desired_capabilities =&gt; casquettes","chauffeur = webdriver.Remote(&quot;http://localhost:4444/wd/hub&quot;, webdriver.DesiredCapabilities.HTMLUNITWITHJS)","$driver = Nouveau Selenium::Remote::Driver( browser_name=&gt;&#39;firefox&#39;, Port=&gt; 4444, version=&gt;&#39;&#39;, Plate-forme=&gt;&#39;LINUX&#39;, javascript=&gt;1, auto_close=&gt;1)","This will cause the HtmlUnit Driver to emulate Firefox 3.6’s JavaScript\nhandling by default.","Firefox Driver\nControls the Firefox browser using a Firefox plugin.\nThe Firefox Profile that is used is stripped down from what is installed on the\nmachine to only include the Selenium WebDriver.xpi (plugin). A few settings are\nalso changed by default (see the source to see which ones)\nFirefox Driver is capable of being run and is tested on Windows, Mac, Linux.\nCurrently on versions 3.6, 10, latest &#8211; 1, latest","Usage","WebDriver chauffeur = Nouveau FirefoxDriver();","IWebDriver chauffeur = Nouveau FirefoxDriver();","chauffeur = webdriver.Firefox()","chauffeur = Sélénium::WebDriver.pour :firefox","mon $driver = Selenium::Remote::Driver-&gt;Nouveau;","Modifying the Firefox Profile\nSuppose that you wanted to modify the user agent string (as above), but you’ve\ngot a tricked out Firefox profile that contains dozens of useful extensions.\nThere are two ways to obtain this profile. Assuming that the profile has been\ncreated using Firefox’s profile manager (firefox -ProfileManager):","ProfilesIni allProfiles = Nouveau ProfilesIni();\nFirefoxProfile profil = allProfiles.getProfile(&quot;WebDriver&quot;)\nprofil.setPreferences(&quot;foo.bar&quot;, 23)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)","var profileManager = Nouveau FirefoxProfileManager();\nFirefoxProfile profil = profileManager.GetProfile(&quot;WebDriver&quot;)\nprofil.SetPreference(&quot;foo.bar&quot;, 23)\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)","Alternatively, if the profile isn’t already registered with Firefox:","File profileDir = Nouveau File(&quot;path/to/top/level/of/profile&quot;)\nFirefoxProfile profil = Nouveau FirefoxProfile(profileDir)\nprofil.addAdditionalPreferences(extraPrefs)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)","FirefoxProfile profil = Nouveau FirefoxProfile(&quot;path/to/top/level/of/profile&quot;)\nprofil.SetPreference(&quot;extra&quot;, &quot;pref&quot;)\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)","As we develop features in the Firefox Driver, we expose the ability to use them.\nFor example, until we feel native events are stable on Firefox for Linux, they\nare disabled by default. To enable them:","FirefoxProfile profil = Nouveau FirefoxProfile();\nprofil.setEnableNativeEvents(vrai)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)","var profil = Nouveau FirefoxProfile EnableNativeEvents = vrai;\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)","profil = webdriver.FirefoxProfile()\nprofil.native_events_enabled = Vrai\nchauffeur = webdriver.Firefox(profil)","profil = Sélénium::WebDriver::Firefox::Profil.Nouveau\nprofil.native_events = vrai\nchauffeur = Sélénium::WebDriver.pour :firefox, :profile =&gt; profil","Internet Explorer Driver\nThe InternetExplorerDriver is a standalone server which implements WebDriver’s wire protocol. This driver has been tested with IE 7, 8, 9, 10, and 11 on appropriate combinations of Vista, Windows 7, Windows 8, and Windows 8.1. As of 15 April 2014, IE 6 is no longer supported.\nThe driver supports running 32-bit and 64-bit versions of the browser. The choice of how to determine which “bit-ness” to use in launching the browser depends on which version of the IEDriverServer.exe is launched. If the 32-bit version of IEDriverServer.exe is launched, the 32-bit version of IE will be launched. Similarly, if the 64-bit version of IEDriverServer.exe is launched, the 64-bit version of IE will be launched.","Usage","WebDriver chauffeur = Nouveau InternetExplorerDriver();","IWebDriver chauffeur = Nouveau InternetExlorerDriver();","chauffeur = Sélénium::WebDriver.pour :ie","mon $driver = Selenium::Remote::Driver-&gt;Nouveau(browser_name =&gt; &#39;internet explorer&#39;)","Avantages","Runs in a real browser and supports Javascript","Les inconvénients","Obviously the InternetExplorerDriver will only work on Windows!\nComparatively slow (though still pretty snappy!)","ChromeDriver\nChromeDriver is maintained / supported by the Chromium\nproject iteslf. WebDriver works with Chrome through the chromedriver binary (found on the chromium\nproject’s download page). You need to have both chromedriver and a version of chrome browser installed.\nchromedriver needs to be placed somewhere on your system’s path in order for WebDriver to automatically\ndiscover it. The Chrome browser itself is discovered by chromedriver in the default installation path.\nThese both can be overridden by environment variables. Please refer to the wiki\nfor more information.","Usage","WebDriver chauffeur = Nouveau ChromeDriver();","IWebDriver chauffeur = Nouveau ChromeDriver();","chauffeur = webdriver.Chrome()","chauffeur = Sélénium::WebDriver.pour :chrome","mon $driver = Selenium::Remote::Driver-&gt;Nouveau(browser_name =&gt; &#39;chrome&#39;)","Avantages","Runs in a real browser and supports JavaScript\nBecause Chrome is a Webkit-based browser, the ChromeDriver may allow you to\nverify that your site works in Safari. Note that since Chrome uses its own V8\nJavaScript engine rather than Safari’s Nitro engine, JavaScript execution may\ndiffer.","Alternative Back-Ends: Mixing WebDriver and RC Technologies","WebDriver-Backed Selenium-RC\nThe Java version of WebDriver provides an implementation of the Selenium-RC API.  These means that\nyou can use the underlying WebDriver technology using the Selenium-RC API.  This is primarily\nprovided for backwards compatibility.  It allows those who have existing test suites using the\nSelenium-RC API to use WebDriver under the covers.  It’s provided to help ease the migration path\nto Selenium-WebDriver.  Also, this allows one to use both APIs, side-by-side, in the same test code.\nSelenium-WebDriver is used like this:","// You may use any WebDriver implementation. Firefox is used here as an example\nWebDriver chauffeur = Nouveau FirefoxDriver();","// A &quot;base url&quot;, used by selenium to resolve relative URLs\n Chaîne baseUrl = &quot;http://www.google.com&quot;;","// Create the Selenium implementation\nSélénium sélénium = Nouveau WebDriverBackedSelenium(chauffeur, baseUrl)","// Perform actions with selenium","sélénium.ouvrir(&quot;http://www.google.com&quot;)\nsélénium.type(&quot;name=q&quot;, &quot;cheese&quot;)\nsélénium.Cliquez sur(&quot;name=btnG&quot;)","// Get the underlying WebDriver implementation back. This will refer to the\n// same WebDriver instance as the &quot;driver&quot; variable above.\nWebDriver driverInstance = ((WebDriverBackedSelenium) sélénium).getWrappedDriver();","//Finally, close the browser. Call stop on the WebDriverBackedSelenium instance\n//instead of calling driver.quit(). Otherwise, the JVM will continue running after\n//the browser has been closed.\nsélénium.Arrêtez();","Avantages","Allows for the WebDriver and Selenium APIs to live side-by-side\nProvides a simple mechanism for a managed migration from the Selenium RC API\nto WebDriver’s\nDoes not require the standalone Selenium RC server to be run","Les inconvénients","Does not implement every method\nMore advanced Selenium usage (using “browserbot” or other built-in JavaScript\nmethods from Selenium Core) may not work\nSome methods may be slower due to underlying implementation differences","Backing WebDriver with Selenium\nWebDriver doesn’t support as many browsers as Selenium RC does, so in order to\nprovide that support while still using the WebDriver API, you can make use of\nla SeleneseCommandExecutor\nSafari is supported in this way with the following code (be sure to disable\npop-up blocking):","DesiredCapabilities capacités = Nouveau DesiredCapabilities();\ncapacités.setBrowserName(&quot;safari&quot;)\nCommandExecutor executor = Nouveau SeleneseCommandExecutor(Nouveau URL(&quot;http://localhost:4444/&quot;), Nouveau URL(&quot;http://www.google.com/&quot;), capacités)\nWebDriver chauffeur = Nouveau RemoteWebDriver(executor, capacités)","There are currently some major limitations with this approach, notably that\nfindElements doesn’t work as expected. Also, because we’re using Selenium Core\nfor the heavy lifting of driving the browser, you are limited by the JavaScript\nsandbox.","Running Standalone Selenium Server for use with RemoteDrivers\nFrom Selenium’s Download page download selenium-server-standalone-.jar and optionally IEDriverServer. If you plan to work with Chrome, download it from Google Code.\nUnpack IEDriverServer and/or chromedriver and put them in a directory which is on the $PATH / %PATH% &#8211; the Selenium Server should then be able to handle requests for IE / Chrome without additional modifications.\nStart the server on the command line with","java -jar /selenium-server-standalone-.pot","If you want to use native events functionality, indicate this on the command line with the option","-Dwebdriver.enable.native.events=1","For other command line options, execute","java -jar /selenium-server-standalone-.jar -help","In order to function properly, the following ports should be allowed incoming TCP connections: 4444, 7054-5 (or twice as many ports as the number of concurrent instances you plan to run). Under Windows, you may need to unblock the applications as well.","Ressources supplémentaires\nYou can find further resources for WebDriver\nin WebDriver’s wiki\nOf course, don’t hesitate to do an internet search on any Selenium topic, including\nSelenium-WebDriver’s drivers.  There are quite a few blogs on Selenium along with numerous posts\non various user forums.  Additionally the Selenium User’s Group is a great resource.\nhttp://groups.google.com/group/selenium-users","Prochaines étapes\nThis chapter has simply been a high level walkthrough of WebDriver and some of its key\ncapabilities.  Once getting familiar with the Selenium-WebDriver API you will then want to learn\nhow to build test suites for maintainability, extensibility, and reduced fragility when features of\nthe AUT frequently change.  The approach most Selenium experts are now recommending is to design\nyour test code using the Page Object Design Pattern along with possibly a Page Factory.\nSelenium-WebDriver provides support for this by supplying a PageFactory class in Java and C#.\nThis is presented, along with other advanced topics, in the\nChapitre suivant. Also, for high-level description of this\ntechnique, you may want to look at the\nTest Design Considerations chapter. Both of these\nchapters present techniques for writing more maintainable tests by making your test code more\nmodular.","Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]"],"content_blocks":[{"id":"text-1","type":"text","heading":"","plain_text":"REMARQUE: nous travaillons actuellement à la documentation de ces sections.\nNous pensons que les informations ici sont exactes, mais sachez que nous travaillons toujours sur ce\nchapitre. Des informations supplémentaires seront fournies au fur et à mesure, ce qui devrait rendre ce chapitre plus utile.\nsolide.","html":"<p>REMARQUE: nous travaillons actuellement à la documentation de ces sections.\nNous pensons que les informations ici sont exactes, mais sachez que nous travaillons toujours sur ce\nchapitre. Des informations supplémentaires seront fournies au fur et à mesure, ce qui devrait rendre ce chapitre plus utile.\nsolide.</p>"},{"id":"text-2","type":"text","heading":"","plain_text":"Présentation de WebDriver\nLa principale nouvelle fonctionnalité de Selenium 2.0 est l&#39;intégration de l&#39;API WebDriver.\nWebDriver est conçu pour fournir une interface de programmation plus simple et plus concise en plus de\nrésoudre certaines limitations de l’API Selenium-RC. Selenium-WebDriver a été développé\npour mieux prendre en charge les pages Web dynamiques où des éléments d&#39;une page peuvent changer sans la page\nlui-même étant rechargé. L’objectif de WebDriver est de fournir une solution orientée objet bien conçue.\nAPI offrant une prise en charge améliorée des problèmes de test d&#39;applications Web avancés et avancés.","html":"<p>Présentation de WebDriver\nLa principale nouvelle fonctionnalité de Selenium 2.0 est l&#039;intégration de l&#039;API WebDriver.\nWebDriver est conçu pour fournir une interface de programmation plus simple et plus concise en plus de\nrésoudre certaines limitations de l’API Selenium-RC. Selenium-WebDriver a été développé\npour mieux prendre en charge les pages Web dynamiques où des éléments d&#039;une page peuvent changer sans la page\nlui-même étant rechargé. L’objectif de WebDriver est de fournir une solution orientée objet bien conçue.\nAPI offrant une prise en charge améliorée des problèmes de test d&#039;applications Web avancés et avancés.</p>"},{"id":"text-3","type":"text","heading":"","plain_text":"Comment WebDriver &quot;pilote-t-il&quot; le navigateur par rapport à Selenium-RC?\nSelenium-WebDriver appelle directement le navigateur en utilisant le support natif de chaque navigateur pour l’automatisation.\nLa manière dont ces appels directs sont effectués et les fonctionnalités qu’ils prennent en charge dépend du navigateur que vous utilisez.\nDes informations sur chaque ‘pilote de navigateur’ sont fournies plus loin dans ce chapitre.\nPour ceux qui sont familiers avec Selenium-RC, c&#39;est très différent de ce que vous avez l&#39;habitude de faire. Sélénium-RC\nfonctionné de la même manière pour chaque navigateur pris en charge. Il &quot;injecte&quot; des fonctions javascript dans le navigateur\nlorsque le navigateur a été chargé et a ensuite utilisé son javascript pour piloter l’AUT dans le navigateur.\nWebDriver n&#39;utilise pas cette technique. Encore une fois, il pilote le navigateur directement à l&#39;aide de son navigateur.\nsupport intégré pour l&#39;automatisation.","html":"<p>Comment WebDriver &quot;pilote-t-il&quot; le navigateur par rapport à Selenium-RC?\nSelenium-WebDriver appelle directement le navigateur en utilisant le support natif de chaque navigateur pour l’automatisation.\nLa manière dont ces appels directs sont effectués et les fonctionnalités qu’ils prennent en charge dépend du navigateur que vous utilisez.\nDes informations sur chaque ‘pilote de navigateur’ sont fournies plus loin dans ce chapitre.\nPour ceux qui sont familiers avec Selenium-RC, c&#039;est très différent de ce que vous avez l&#039;habitude de faire. Sélénium-RC\nfonctionné de la même manière pour chaque navigateur pris en charge. Il &quot;injecte&quot; des fonctions javascript dans le navigateur\nlorsque le navigateur a été chargé et a ensuite utilisé son javascript pour piloter l’AUT dans le navigateur.\nWebDriver n&#039;utilise pas cette technique. Encore une fois, il pilote le navigateur directement à l&#039;aide de son navigateur.\nsupport intégré pour l&#039;automatisation.</p>"},{"id":"text-4","type":"text","heading":"","plain_text":"WebDriver et le Selenium-Server\nLe serveur Selenium peut être nécessaire ou non, selon l’utilisation que vous envisagez d’utiliser Selenium-WebDriver.\nSi votre navigateur et vos tests s&#39;exécutent tous sur le même ordinateur et que vos tests utilisent uniquement l&#39;API WebDriver,\nalors vous n&#39;avez pas besoin d&#39;exécuter le serveur Selenium; WebDriver exécutera le navigateur directement.\nCependant, il existe certaines raisons d&#39;utiliser Selenium-Server avec Selenium-WebDriver.","html":"<p>WebDriver et le Selenium-Server\nLe serveur Selenium peut être nécessaire ou non, selon l’utilisation que vous envisagez d’utiliser Selenium-WebDriver.\nSi votre navigateur et vos tests s&#039;exécutent tous sur le même ordinateur et que vos tests utilisent uniquement l&#039;API WebDriver,\nalors vous n&#039;avez pas besoin d&#039;exécuter le serveur Selenium; WebDriver exécutera le navigateur directement.\nCependant, il existe certaines raisons d&#039;utiliser Selenium-Server avec Selenium-WebDriver.</p>"},{"id":"text-5","type":"text","heading":"","plain_text":"Vous utilisez Selenium-Grid pour répartir vos tests sur plusieurs machines ou machines virtuelles (VM).\nVous souhaitez vous connecter à un ordinateur distant doté d&#39;une version de navigateur particulière qui n&#39;est pas activée\nvotre machine actuelle.\nVous n&#39;utilisez pas les liaisons Java (c&#39;est-à-dire Python, C # ou Ruby) et souhaitez utiliser le pilote HtmlUnit","html":"<p>Vous utilisez Selenium-Grid pour répartir vos tests sur plusieurs machines ou machines virtuelles (VM).\nVous souhaitez vous connecter à un ordinateur distant doté d&#039;une version de navigateur particulière qui n&#039;est pas activée\nvotre machine actuelle.\nVous n&#039;utilisez pas les liaisons Java (c&#039;est-à-dire Python, C # ou Ruby) et souhaitez utiliser le pilote HtmlUnit</p>"},{"id":"text-6","type":"text","heading":"","plain_text":"Configuration d&#39;un projet Selenium-WebDriver\nInstaller Selenium signifie configurer un projet dans un développement pour pouvoir écrire un programme en utilisant\nSélénium. Cela dépend de votre langage de programmation et de votre environnement de développement.","html":"<p>Configuration d&#039;un projet Selenium-WebDriver\nInstaller Selenium signifie configurer un projet dans un développement pour pouvoir écrire un programme en utilisant\nSélénium. Cela dépend de votre langage de programmation et de votre environnement de développement.</p>"},{"id":"text-7","type":"text","heading":"","plain_text":"Java\nLe moyen le plus simple de configurer un projet Java Selenium 2.0 consiste à utiliser Maven. Maven téléchargera le\njava (la bibliothèque du client java Selenium 2.0) et toutes ses dépendances, et créera le\nprojet pour vous, en utilisant un fichier maven pom.xml (configuration du projet). Une fois que vous avez fait cela, vous\npouvez importer le projet maven dans votre IDE préféré, IntelliJ IDEA ou Eclipse.\nCommencez par créer un dossier contenant vos fichiers de projet Selenium. Ensuite, pour utiliser Maven, vous avez besoin d’un\nfichier pom.xml. Cela peut être créé avec un éditeur de texte. Nous n’enseignerons pas le\ndes détails sur les fichiers pom.xml ou sur l&#39;utilisation de Maven car il existe déjà d&#39;excellentes références à ce sujet.\nVotre fichier pom.xml ressemblera à ceci. Créez ce fichier dans le dossier que vous avez créé pour\nvotre projet.","html":"<p>Java\nLe moyen le plus simple de configurer un projet Java Selenium 2.0 consiste à utiliser Maven. Maven téléchargera le\njava (la bibliothèque du client java Selenium 2.0) et toutes ses dépendances, et créera le\nprojet pour vous, en utilisant un fichier maven pom.xml (configuration du projet). Une fois que vous avez fait cela, vous\npouvez importer le projet maven dans votre IDE préféré, IntelliJ IDEA ou Eclipse.\nCommencez par créer un dossier contenant vos fichiers de projet Selenium. Ensuite, pour utiliser Maven, vous avez besoin d’un\nfichier pom.xml. Cela peut être créé avec un éditeur de texte. Nous n’enseignerons pas le\ndes détails sur les fichiers pom.xml ou sur l&#039;utilisation de Maven car il existe déjà d&#039;excellentes références à ce sujet.\nVotre fichier pom.xml ressemblera à ceci. Créez ce fichier dans le dossier que vous avez créé pour\nvotre projet.</p>"},{"id":"text-8","type":"text","heading":"","plain_text":"&lt;projet xmlns =&quot;http://maven.apache.org/POM/4.0.0&quot;\n                 xmlns: xsi =&quot;http://www.w3.org/2001/XMLSchema-instance&quot;\n                 xsi: schemaLocation =&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&gt;\n        4.0.0\n        MySel20Proj\n        MySel20Proj\n        1,0\n        \n            \n                org.seleniumhq.selenium\n                sélénium-serveur\n                3.0.1","html":"<p>&lt;projet xmlns =&quot;http://maven.apache.org/POM/4.0.0&quot;\n                 xmlns: xsi =&quot;http://www.w3.org/2001/XMLSchema-instance&quot;\n                 xsi: schemaLocation =&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&gt;\n        4.0.0\n        MySel20Proj\n        MySel20Proj\n        1,0\n        \n            \n                org.seleniumhq.selenium\n                sélénium-serveur\n                3.0.1</p>"},{"id":"text-9","type":"text","heading":"","plain_text":"Assurez-vous de spécifier la version la plus récente. Au moment de la rédaction, la version indiquée ci-dessus était\nles plus courants, cependant, des rejets fréquents ont eu lieu immédiatement après la publication de Selenium 2.0.\nConsultez la page de téléchargement de Maven pour connaître la version actuelle et éditez la dépendance ci-dessus en conséquence.\nMaintenant, à partir d&#39;une ligne de commande, CD dans le répertoire du projet et exécutez maven comme suit.\nCela téléchargera Selenium et toutes ses dépendances et les ajoutera au projet.\nEnfin, importez le projet dans votre environnement de développement préféré. Pour ceux qui ne connaissent pas\navec cela, nous avons fourni une annexe qui montre cela.\nImporter un projet maven dans IntelliJ IDEA.\nImporter un projet maven dans Eclipse.","html":"<p>Assurez-vous de spécifier la version la plus récente. Au moment de la rédaction, la version indiquée ci-dessus était\nles plus courants, cependant, des rejets fréquents ont eu lieu immédiatement après la publication de Selenium 2.0.\nConsultez la page de téléchargement de Maven pour connaître la version actuelle et éditez la dépendance ci-dessus en conséquence.\nMaintenant, à partir d&#039;une ligne de commande, CD dans le répertoire du projet et exécutez maven comme suit.\nCela téléchargera Selenium et toutes ses dépendances et les ajoutera au projet.\nEnfin, importez le projet dans votre environnement de développement préféré. Pour ceux qui ne connaissent pas\navec cela, nous avons fourni une annexe qui montre cela.\nImporter un projet maven dans IntelliJ IDEA.\nImporter un projet maven dans Eclipse.</p>"},{"id":"text-10","type":"text","heading":"","plain_text":"C #\nA partir de Selenium 2.2.0, les liaisons C # sont distribuées sous la forme d’un ensemble de dll signées avec d’autres\ndépendance dlls. Avant la version 2.2.0, toutes les dll de Selenium n’étaient pas signées.\nPour inclure Selenium dans votre projet, téléchargez simplement la dernière\nfichier zip sélénium-dotnet de http://selenium-release.storage.googleapis.com/index.html.\nSi vous utilisez Windows Vista ou supérieur, vous devez débloquer le fichier zip avant\nDécompressez-le: Faites un clic droit sur le fichier zip, cliquez sur «Propriétés», cliquez sur «Débloquer»\net cliquez sur “OK”.\nDécompressez le contenu du fichier zip et ajoutez une référence à chacun des fichiers décompressés.\nDLL à votre projet dans Visual Studio (ou votre IDE de choix).\nPaquets officiels NuGet:\nRC\nWebDriver\nWebDriverBackedSelenium\nSoutien","html":"<p>C #\nA partir de Selenium 2.2.0, les liaisons C # sont distribuées sous la forme d’un ensemble de dll signées avec d’autres\ndépendance dlls. Avant la version 2.2.0, toutes les dll de Selenium n’étaient pas signées.\nPour inclure Selenium dans votre projet, téléchargez simplement la dernière\nfichier zip sélénium-dotnet de http://selenium-release.storage.googleapis.com/index.html.\nSi vous utilisez Windows Vista ou supérieur, vous devez débloquer le fichier zip avant\nDécompressez-le: Faites un clic droit sur le fichier zip, cliquez sur «Propriétés», cliquez sur «Débloquer»\net cliquez sur “OK”.\nDécompressez le contenu du fichier zip et ajoutez une référence à chacun des fichiers décompressés.\nDLL à votre projet dans Visual Studio (ou votre IDE de choix).\nPaquets officiels NuGet:\nRC\nWebDriver\nWebDriverBackedSelenium\nSoutien</p>"},{"id":"text-11","type":"text","heading":"","plain_text":"Python\nSi vous utilisez Python pour l’automatisation des tests, vous êtes probablement déjà familiarisé avec le développement.\nen Python. Pour ajouter Selenium à votre environnement Python, exécutez la commande suivante à partir de\nune ligne de commande.\nPip nécessite l&#39;installation de pip. Pip a également une dépendance.\nsur setuptools.\nL’enseignement du développement Python lui-même dépasse le cadre de ce document, mais il existe de nombreux\nLes ressources sur Python et les développeurs potentiels de votre organisation peuvent vous aider à vous mettre à niveau.","html":"<p>Python\nSi vous utilisez Python pour l’automatisation des tests, vous êtes probablement déjà familiarisé avec le développement.\nen Python. Pour ajouter Selenium à votre environnement Python, exécutez la commande suivante à partir de\nune ligne de commande.\nPip nécessite l&#039;installation de pip. Pip a également une dépendance.\nsur setuptools.\nL’enseignement du développement Python lui-même dépasse le cadre de ce document, mais il existe de nombreux\nLes ressources sur Python et les développeurs potentiels de votre organisation peuvent vous aider à vous mettre à niveau.</p>"},{"id":"text-12","type":"text","heading":"","plain_text":"Rubis\nSi vous utilisez Ruby pour l’automatisation des tests, vous êtes probablement déjà familiarisé avec le développement.\nen rubis. Pour ajouter Selenium à votre environnement Ruby, exécutez la commande suivante à partir de\nune ligne de commande.","html":"<p>Rubis\nSi vous utilisez Ruby pour l’automatisation des tests, vous êtes probablement déjà familiarisé avec le développement.\nen rubis. Pour ajouter Selenium à votre environnement Ruby, exécutez la commande suivante à partir de\nune ligne de commande.</p>"},{"id":"text-13","type":"text","heading":"","plain_text":"bijou installer sélénium-webdriver","html":"<p>bijou installer sélénium-webdriver</p>"},{"id":"text-14","type":"text","heading":"","plain_text":"L’enseignement du développement de Ruby lui-même dépasse le cadre de ce document, mais il existe de nombreuses\nLes ressources sur Ruby et les développeurs potentiels de votre organisation peuvent vous aider à vous mettre à niveau.","html":"<p>L’enseignement du développement de Ruby lui-même dépasse le cadre de ce document, mais il existe de nombreuses\nLes ressources sur Ruby et les développeurs potentiels de votre organisation peuvent vous aider à vous mettre à niveau.</p>"},{"id":"text-15","type":"text","heading":"","plain_text":"Perl\nLes liaisons Perl sont fournies par des tiers. Veuillez vous reporter à la documentation correspondante pour savoir comment\ninstaller / commencer. Il existe une liaison Perl connue à ce jour.","html":"<p>Perl\nLes liaisons Perl sont fournies par des tiers. Veuillez vous reporter à la documentation correspondante pour savoir comment\ninstaller / commencer. Il existe une liaison Perl connue à ce jour.</p>"},{"id":"text-16","type":"text","heading":"","plain_text":"JavaScript\nSi vous utilisez node.js pour développer votre application, le projet sélénium fournit des liaisons Javascript sur npm.\nInstallez les liaisons Javascript avec npm:","html":"<p>JavaScript\nSi vous utilisez node.js pour développer votre application, le projet sélénium fournit des liaisons Javascript sur npm.\nInstallez les liaisons Javascript avec npm:</p>"},{"id":"text-17","type":"text","heading":"","plain_text":"npm installer sélénium-webdriver","html":"<p>npm installer sélénium-webdriver</p>"},{"id":"text-18","type":"text","heading":"","plain_text":"Vous pouvez trouver la documentation de l&#39;API ici.","html":"<p>Vous pouvez trouver la documentation de l&#039;API ici.</p>"},{"id":"text-19","type":"text","heading":"","plain_text":"Migration de Selenium 1.0\nPour ceux qui ont déjà écrit des suites de tests en utilisant Selenium 1.0, nous avons fourni des conseils sur la façon de\nmigrez votre code existant vers Selenium 2.0. Simon Stewart, développeur principal de Selenium 2.0,\na écrit un article sur la migration de Selenium 1.0. Nous avons inclus cela en annexe.\nMigration de Selenium RC vers Selenium WebDriver","html":"<p>Migration de Selenium 1.0\nPour ceux qui ont déjà écrit des suites de tests en utilisant Selenium 1.0, nous avons fourni des conseils sur la façon de\nmigrez votre code existant vers Selenium 2.0. Simon Stewart, développeur principal de Selenium 2.0,\na écrit un article sur la migration de Selenium 1.0. Nous avons inclus cela en annexe.\nMigration de Selenium RC vers Selenium WebDriver</p>"},{"id":"text-20","type":"text","heading":"","plain_text":"Présentation de l&#39;API Selenium-WebDriver par exemple\nWebDriver est un outil permettant d’automatiser le test d’applications Web, en particulier\npour vérifier qu&#39;ils fonctionnent comme prévu. Son objectif est de fournir une API conviviale\nfacile à explorer et à comprendre, plus facile à utiliser que l&#39;API Selenium-RC (1.0),\nce qui aidera à rendre vos tests plus faciles à\nlire et maintenir. Il n’est lié à aucun cadre de test particulier, il peut donc\nêtre utilisé aussi bien dans un projet de test unitaire ou à partir d’une ancienne méthode «principale».\nCette section présente l’API de WebDriver et vous aide à commencer à devenir\nfamilier avec elle. Commencez par configurer un projet WebDriver si vous ne l’avez pas déjà fait.\nCeci a été décrit dans la section précédente, Configuration d&#39;un projet Selenium-WebDriver.\nUne fois votre projet configuré, vous pouvez voir que WebDriver agit comme n&#39;importe quelle bibliothèque normale:\nentièrement autonome, et vous n’avez généralement pas besoin de vous souvenir de commencer\nprocessus supplémentaires ou exécuter les programmes d&#39;installation avant de l&#39;utiliser, par opposition au serveur proxy\navec Selenium-RC.\nRemarque: des étapes supplémentaires sont nécessaires pour utiliser ChromeDriver, Opera Driver, Android Driver.\net pilote iOS\nVous êtes maintenant prêt à écrire du code. Voici un moyen facile de commencer\nexemple, qui recherche le terme &quot;Fromage&quot; sur Google, puis affiche le\ntitre de la page de résultats sur la console.","html":"<p>Présentation de l&#039;API Selenium-WebDriver par exemple\nWebDriver est un outil permettant d’automatiser le test d’applications Web, en particulier\npour vérifier qu&#039;ils fonctionnent comme prévu. Son objectif est de fournir une API conviviale\nfacile à explorer et à comprendre, plus facile à utiliser que l&#039;API Selenium-RC (1.0),\nce qui aidera à rendre vos tests plus faciles à\nlire et maintenir. Il n’est lié à aucun cadre de test particulier, il peut donc\nêtre utilisé aussi bien dans un projet de test unitaire ou à partir d’une ancienne méthode «principale».\nCette section présente l’API de WebDriver et vous aide à commencer à devenir\nfamilier avec elle. Commencez par configurer un projet WebDriver si vous ne l’avez pas déjà fait.\nCeci a été décrit dans la section précédente, Configuration d&#039;un projet Selenium-WebDriver.\nUne fois votre projet configuré, vous pouvez voir que WebDriver agit comme n&#039;importe quelle bibliothèque normale:\nentièrement autonome, et vous n’avez généralement pas besoin de vous souvenir de commencer\nprocessus supplémentaires ou exécuter les programmes d&#039;installation avant de l&#039;utiliser, par opposition au serveur proxy\navec Selenium-RC.\nRemarque: des étapes supplémentaires sont nécessaires pour utiliser ChromeDriver, Opera Driver, Android Driver.\net pilote iOS\nVous êtes maintenant prêt à écrire du code. Voici un moyen facile de commencer\nexemple, qui recherche le terme &quot;Fromage&quot; sur Google, puis affiche le\ntitre de la page de résultats sur la console.</p>"},{"id":"text-21","type":"text","heading":"","plain_text":"paquet org.openqa.selenium.example;","html":"<p>paquet org.openqa.selenium.example;</p>"},{"id":"text-22","type":"text","heading":"","plain_text":"importation org.openqa.selenium.By;\nimportation org.openqa.selenium.WebDriver;\nimportation org.openqa.selenium.WebElement;\nimportation org.openqa.selenium.firefox.FirefoxDriver;\nimportation org.openqa.selenium.support.ui.ExpectedCondition;\nimportation org.openqa.selenium.support.ui.WebDriverWait;","html":"<p>importation org.openqa.selenium.By;\nimportation org.openqa.selenium.WebDriver;\nimportation org.openqa.selenium.WebElement;\nimportation org.openqa.selenium.firefox.FirefoxDriver;\nimportation org.openqa.selenium.support.ui.ExpectedCondition;\nimportation org.openqa.selenium.support.ui.WebDriverWait;</p>"},{"id":"text-23","type":"text","heading":"","plain_text":"Publique classe Selenium2Example  \n    Publique statique vide principale(Chaîne[] args) \n        // Créer une nouvelle instance du pilote Firefox\n        // Notez que le reste du code repose sur l&#39;interface, \n        // pas la mise en œuvre.\n        WebDriver chauffeur = Nouveau FirefoxDriver();","html":"<p>Publique classe Selenium2Example  \n    Publique statique vide principale(Chaîne[] args) \n        // Créer une nouvelle instance du pilote Firefox\n        // Notez que le reste du code repose sur l&#039;interface, \n        // pas la mise en œuvre.\n        WebDriver chauffeur = Nouveau FirefoxDriver();</p>"},{"id":"text-24","type":"text","heading":"","plain_text":"// Et maintenant, utilisez ceci pour visiter Google\n        chauffeur.obtenir(&quot;http://www.google.com&quot;)\n        // Alternativement, la même chose peut être faite comme ça\n        // driver.navigate (). to (&quot;http://www.google.com&quot;);","html":"<p>// Et maintenant, utilisez ceci pour visiter Google\n        chauffeur.obtenir(&quot;http://www.google.com&quot;)\n        // Alternativement, la même chose peut être faite comme ça\n        // driver.navigate (). to (&quot;http://www.google.com&quot;);</p>"},{"id":"text-25","type":"text","heading":"","plain_text":"// Trouver l&#39;élément de saisie de texte par son nom\n        WebElement élément = chauffeur.findElement(Par.prénom(&quot;q&quot;));","html":"<p>// Trouver l&#039;élément de saisie de texte par son nom\n        WebElement élément = chauffeur.findElement(Par.prénom(&quot;q&quot;));</p>"},{"id":"text-26","type":"text","heading":"","plain_text":"// Entrez quelque chose à rechercher\n        élément.sendKeys(&quot;Fromage!&quot;)","html":"<p>// Entrez quelque chose à rechercher\n        élément.sendKeys(&quot;Fromage!&quot;)</p>"},{"id":"text-27","type":"text","heading":"","plain_text":"// Soumettez maintenant le formulaire. WebDriver trouvera la forme pour nous à partir de l&#39;élément\n        élément.soumettre();","html":"<p>// Soumettez maintenant le formulaire. WebDriver trouvera la forme pour nous à partir de l&#039;élément\n        élément.soumettre();</p>"},{"id":"text-28","type":"text","heading":"","plain_text":"// Vérifier le titre de la page\n        Système.en dehors.imprimer(&quot;Le titre de la page est:&quot; + chauffeur.getTitle());\n        \n        // La recherche de Google est rendue dynamiquement avec JavaScript.\n        // Attend le chargement de la page, délai d&#39;expiration après 10 secondes\n        (Nouveau WebDriverWait(chauffeur, dix)).jusqu&#39;à ce que(Nouveau Condition attendue&lt;Booléen&gt; () \n            Publique Booléen appliquer(WebDriver ré) \n                revenir ré.getTitle()toLowerCase()commence avec(&quot;fromage!&quot;)\n            \n        );","html":"<p>// Vérifier le titre de la page\n        Système.en dehors.imprimer(&quot;Le titre de la page est:&quot; + chauffeur.getTitle());\n        \n        // La recherche de Google est rendue dynamiquement avec JavaScript.\n        // Attend le chargement de la page, délai d&#039;expiration après 10 secondes\n        (Nouveau WebDriverWait(chauffeur, dix)).jusqu&#039;à ce que(Nouveau Condition attendue&lt;Booléen&gt; () \n            Publique Booléen appliquer(WebDriver ré) \n                revenir ré.getTitle()toLowerCase()commence avec(&quot;fromage!&quot;)\n            \n        );</p>"},{"id":"text-29","type":"text","heading":"","plain_text":"// devrait voir: &quot;cheese! - Google Search&quot;\n        Système.en dehors.imprimer(&quot;Le titre de la page est:&quot; + chauffeur.getTitle());\n        \n        // Fermer le navigateur\n        chauffeur.quitter();","html":"<p>// devrait voir: &quot;cheese! - Google Search&quot;\n        Système.en dehors.imprimer(&quot;Le titre de la page est:&quot; + chauffeur.getTitle());\n        \n        // Fermer le navigateur\n        chauffeur.quitter();</p>"},{"id":"text-30","type":"text","heading":"","plain_text":"en utilisant OpenQA.Selenium;\nen utilisant OpenQA.Selenium.Firefox;","html":"<p>en utilisant OpenQA.Selenium;\nen utilisant OpenQA.Selenium.Firefox;</p>"},{"id":"text-31","type":"text","heading":"","plain_text":"// Requiert une référence à WebDriver.Support.dll\nen utilisant OpenQA.Selenium.Support.UI;","html":"<p>// Requiert une référence à WebDriver.Support.dll\nen utilisant OpenQA.Selenium.Support.UI;</p>"},{"id":"text-32","type":"text","heading":"","plain_text":"classe GoogleSuggest","html":"<p>classe GoogleSuggest</p>"},{"id":"text-33","type":"text","heading":"","plain_text":"statique vide Principale(chaîne[] args)\n    \n        // Crée une nouvelle instance du pilote Firefox.\n        // Notez qu&#39;il est encapsulé dans une clause using afin que le navigateur soit fermé \n        // et le WebDriver est disposé (même face aux exceptions).","html":"<p>statique vide Principale(chaîne[] args)\n    \n        // Crée une nouvelle instance du pilote Firefox.\n        // Notez qu&#039;il est encapsulé dans une clause using afin que le navigateur soit fermé \n        // et le WebDriver est disposé (même face aux exceptions).</p>"},{"id":"text-34","type":"text","heading":"","plain_text":"// Notez également que le reste du code repose sur l&#39;interface, \n        // pas la mise en œuvre.","html":"<p>// Notez également que le reste du code repose sur l&#039;interface, \n        // pas la mise en œuvre.</p>"},{"id":"text-35","type":"text","heading":"","plain_text":"// Notez également que d&#39;autres pilotes (InternetExplorerDriver,\n        // ChromeDriver, etc.) nécessitera une configuration supplémentaire \n        // avant que cet exemple fonctionne. Voir les pages wiki pour le\n        // pilotes individuels sur http://code.google.com/p/selenium/wiki\n        // pour plus d&#39;informations.\n        en utilisant (IWebDriver chauffeur = Nouveau FirefoxDriver())\n        \n            // Remarque la navigation est légèrement différente de la version Java\n            // C&#39;est parce que &#39;get&#39; est un mot clé en C #\n            chauffeur.Naviguer()GoToUrl(&quot;http://www.google.com/&quot;)\n    \n            // Trouver l&#39;élément de saisie de texte par son nom\n            IWebElement question = chauffeur.FindElement(Par.prénom(&quot;q&quot;));\n    \n            // Entrez quelque chose à rechercher\n            question.SendKeys(&quot;Fromage&quot;)\n    \n            // Soumettez maintenant le formulaire. WebDriver trouvera la forme pour nous à partir de l&#39;élément\n            question.Soumettre();\n    \n            // La recherche de Google est rendue dynamiquement avec JavaScript.\n            // Attend le chargement de la page, délai d&#39;expiration après 10 secondes\n            var attendre = Nouveau WebDriverWait(chauffeur, TimeSpan.À partir de secondes(dix));\n            attendre.Jusqu&#39;à ce que(ré =&gt; ré.Titre.Commence avec(&quot;fromage&quot;, Comparaison de chaînes.OrdinalIgnoreCase));\n    \n            // devrait voir: &quot;Cheese - Google Search&quot; (pour une locale anglaise)\n            Console.WriteLine(&quot;Le titre de la page est:&quot; + chauffeur.Titre)","html":"<p>// Notez également que d&#039;autres pilotes (InternetExplorerDriver,\n        // ChromeDriver, etc.) nécessitera une configuration supplémentaire \n        // avant que cet exemple fonctionne. Voir les pages wiki pour le\n        // pilotes individuels sur http://code.google.com/p/selenium/wiki\n        // pour plus d&#039;informations.\n        en utilisant (IWebDriver chauffeur = Nouveau FirefoxDriver())\n        \n            // Remarque la navigation est légèrement différente de la version Java\n            // C&#039;est parce que &#039;get&#039; est un mot clé en C #\n            chauffeur.Naviguer()GoToUrl(&quot;http://www.google.com/&quot;)\n    \n            // Trouver l&#039;élément de saisie de texte par son nom\n            IWebElement question = chauffeur.FindElement(Par.prénom(&quot;q&quot;));\n    \n            // Entrez quelque chose à rechercher\n            question.SendKeys(&quot;Fromage&quot;)\n    \n            // Soumettez maintenant le formulaire. WebDriver trouvera la forme pour nous à partir de l&#039;élément\n            question.Soumettre();\n    \n            // La recherche de Google est rendue dynamiquement avec JavaScript.\n            // Attend le chargement de la page, délai d&#039;expiration après 10 secondes\n            var attendre = Nouveau WebDriverWait(chauffeur, TimeSpan.À partir de secondes(dix));\n            attendre.Jusqu&#039;à ce que(ré =&gt; ré.Titre.Commence avec(&quot;fromage&quot;, Comparaison de chaînes.OrdinalIgnoreCase));\n    \n            // devrait voir: &quot;Cheese - Google Search&quot; (pour une locale anglaise)\n            Console.WriteLine(&quot;Le titre de la page est:&quot; + chauffeur.Titre)</p>"},{"id":"text-36","type":"text","heading":"","plain_text":"de sélénium importation webdriver\nde sélénium.common.exceptions importation TimeoutException\nde selenium.webdriver.support.ui importation WebDriverWait # disponible depuis 2.4.0\nde selenium.webdriver.support importation conditions_attendues comme CE # disponible depuis 2.26.0","html":"<p>de sélénium importation webdriver\nde sélénium.common.exceptions importation TimeoutException\nde selenium.webdriver.support.ui importation WebDriverWait # disponible depuis 2.4.0\nde selenium.webdriver.support importation conditions_attendues comme CE # disponible depuis 2.26.0</p>"},{"id":"text-37","type":"text","heading":"","plain_text":"# Créer une nouvelle instance du pilote Firefox\nchauffeur = webdriver.Firefox()","html":"<p># Créer une nouvelle instance du pilote Firefox\nchauffeur = webdriver.Firefox()</p>"},{"id":"text-38","type":"text","heading":"","plain_text":"# aller à la page d&#39;accueil de google\nchauffeur.obtenir(&quot;http://www.google.com&quot;)","html":"<p># aller à la page d&#039;accueil de google\nchauffeur.obtenir(&quot;http://www.google.com&quot;)</p>"},{"id":"text-39","type":"text","heading":"","plain_text":"# la page est ajaxy donc le titre est à l&#39;origine ceci:\nimpression chauffeur.Titre","html":"<p># la page est ajaxy donc le titre est à l&#039;origine ceci:\nimpression chauffeur.Titre</p>"},{"id":"text-40","type":"text","heading":"","plain_text":"# trouve que l&#39;attribut name est q (le champ de recherche google)\ninputElement = chauffeur.find_element_by_name(&quot;q&quot;)","html":"<p># trouve que l&#039;attribut name est q (le champ de recherche google)\ninputElement = chauffeur.find_element_by_name(&quot;q&quot;)</p>"},{"id":"text-41","type":"text","heading":"","plain_text":"# tapez dans la recherche\ninputElement.send_keys(&quot;fromage!&quot;)","html":"<p># tapez dans la recherche\ninputElement.send_keys(&quot;fromage!&quot;)</p>"},{"id":"text-42","type":"text","heading":"","plain_text":"# soumettre le formulaire (bien que google recherche automatiquement maintenant sans soumettre)\ninputElement.soumettre()","html":"<p># soumettre le formulaire (bien que google recherche automatiquement maintenant sans soumettre)\ninputElement.soumettre()</p>"},{"id":"text-43","type":"text","heading":"","plain_text":"essayer:\n    # nous devons attendre que la page se rafraîchit, la dernière chose qui semble avoir été mise à jour est le titre\n    WebDriverWait(chauffeur, dix).jusqu&#39;à ce que(CE.title_contains(&quot;fromage!&quot;))","html":"<p>essayer:\n    # nous devons attendre que la page se rafraîchit, la dernière chose qui semble avoir été mise à jour est le titre\n    WebDriverWait(chauffeur, dix).jusqu&#039;à ce que(CE.title_contains(&quot;fromage!&quot;))</p>"},{"id":"text-44","type":"text","heading":"","plain_text":"# Vous devriez voir &quot;fromage! - Recherche Google&quot;\n    impression chauffeur.Titre","html":"<p># Vous devriez voir &quot;fromage! - Recherche Google&quot;\n    impression chauffeur.Titre</p>"},{"id":"text-45","type":"text","heading":"","plain_text":"enfin:\n    chauffeur.quitter()","html":"<p>enfin:\n    chauffeur.quitter()</p>"},{"id":"text-46","type":"text","heading":"","plain_text":"exiger &#39;rubygems&#39;\nexiger &#39;sélénium-webdriver&#39;","html":"<p>exiger &#039;rubygems&#039;\nexiger &#039;sélénium-webdriver&#039;</p>"},{"id":"text-47","type":"text","heading":"","plain_text":"chauffeur = Sélénium::WebDriver.pour : firefox\nchauffeur.obtenir &quot;http://google.com&quot;","html":"<p>chauffeur = Sélénium::WebDriver.pour : firefox\nchauffeur.obtenir &quot;http://google.com&quot;</p>"},{"id":"text-48","type":"text","heading":"","plain_text":"élément = chauffeur.find_element :prénom =&gt; &quot;q&quot;\nélément.send_keys &quot;Fromage!&quot;\nélément.soumettre","html":"<p>élément = chauffeur.find_element :prénom =&gt; &quot;q&quot;\nélément.send_keys &quot;Fromage!&quot;\nélément.soumettre</p>"},{"id":"text-49","type":"text","heading":"","plain_text":"met &quot;Le titre de la page est #driver.title &quot;","html":"<p>met &quot;Le titre de la page est #driver.title &quot;</p>"},{"id":"text-50","type":"text","heading":"","plain_text":"attendre = Sélénium::WebDriver::Attendre.Nouveau(:temps libre =&gt; dix)\nattendre.jusqu&#39;à ce que  chauffeur.Titre.downcase.Commencer avec? &quot;fromage!&quot;","html":"<p>attendre = Sélénium::WebDriver::Attendre.Nouveau(:temps libre =&gt; dix)\nattendre.jusqu&#039;à ce que  chauffeur.Titre.downcase.Commencer avec? &quot;fromage!&quot;</p>"},{"id":"text-51","type":"text","heading":"","plain_text":"met &quot;Le titre de la page est #driver.title &quot;\nchauffeur.quitter","html":"<p>met &quot;Le titre de la page est #driver.title &quot;\nchauffeur.quitter</p>"},{"id":"text-52","type":"text","heading":"","plain_text":"var chauffeur = Nouveau webdriver.Constructeur()construire();\nchauffeur.obtenir(&quot;http://www.google.com&quot;)","html":"<p>var chauffeur = Nouveau webdriver.Constructeur()construire();\nchauffeur.obtenir(&quot;http://www.google.com&quot;)</p>"},{"id":"text-53","type":"text","heading":"","plain_text":"var élément = chauffeur.findElement(webdriver.Par.prénom(&#39;q&#39;));\nélément.sendKeys(&#39;Fromage!&#39;)\nélément.soumettre();","html":"<p>var élément = chauffeur.findElement(webdriver.Par.prénom(&#039;q&#039;));\nélément.sendKeys(&#039;Fromage!&#039;)\nélément.soumettre();</p>"},{"id":"text-54","type":"text","heading":"","plain_text":"chauffeur.getTitle()puis(une fonction(Titre) \n  console.bûche(&#39;Le titre de la page est:&#39; + Titre)\n);","html":"<p>chauffeur.getTitle()puis(une fonction(Titre) \n  console.bûche(&#039;Le titre de la page est:&#039; + Titre)\n);</p>"},{"id":"text-55","type":"text","heading":"","plain_text":"chauffeur.attendre(une fonction() \n  revenir chauffeur.getTitle()puis(une fonction(Titre) \n    revenir Titre.toLowerCase()lastIndexOf(&#39;fromage!&#39;, 0) === 0;\n  );\n, 3000)","html":"<p>chauffeur.attendre(une fonction() \n  revenir chauffeur.getTitle()puis(une fonction(Titre) \n    revenir Titre.toLowerCase()lastIndexOf(&#039;fromage!&#039;, 0) === 0;\n  );\n, 3000)</p>"},{"id":"text-56","type":"text","heading":"","plain_text":"chauffeur.getTitle()puis(une fonction(Titre) \n  console.bûche(&#39;Le titre de la page est:&#39; + Titre)\n);","html":"<p>chauffeur.getTitle()puis(une fonction(Titre) \n  console.bûche(&#039;Le titre de la page est:&#039; + Titre)\n);</p>"},{"id":"text-57","type":"text","heading":"","plain_text":"chauffeur.quitter();","html":"<p>chauffeur.quitter();</p>"},{"id":"text-58","type":"text","heading":"","plain_text":"utilisation Sélénium :: Télécommande :: Pilote;","html":"<p>utilisation Sélénium :: Télécommande :: Pilote;</p>"},{"id":"text-59","type":"text","heading":"","plain_text":"# Créer une nouvelle instance du pilote\nmon conducteur $ = Sélénium :: Télécommande :: Pilote-&gt;Nouveau;","html":"<p># Créer une nouvelle instance du pilote\nmon conducteur $ = Sélénium :: Télécommande :: Pilote-&gt;Nouveau;</p>"},{"id":"text-60","type":"text","heading":"","plain_text":"# Aller à la page d&#39;accueil de Google\nconducteur $-&gt;obtenir(&quot;http://www.google.com&quot;)","html":"<p># Aller à la page d&#039;accueil de Google\nconducteur $-&gt;obtenir(&quot;http://www.google.com&quot;)</p>"},{"id":"text-61","type":"text","heading":"","plain_text":"# Imprimer le titre de la page d&#39;origine\nmon $ title = conducteur $-&gt;get_title();\nimpression &quot;$ title  n&quot;;","html":"<p># Imprimer le titre de la page d&#039;origine\nmon $ title = conducteur $-&gt;get_title();\nimpression &quot;$ title  n&quot;;</p>"},{"id":"text-62","type":"text","heading":"","plain_text":"# Trouver l&#39;élément dont l&#39;attribut name est q (champ de recherche Google)\nmon $ inputElement = conducteur $-&gt;find_element(&quot;q&quot;, &quot;prénom&quot;)","html":"<p># Trouver l&#039;élément dont l&#039;attribut name est q (champ de recherche Google)\nmon $ inputElement = conducteur $-&gt;find_element(&quot;q&quot;, &quot;prénom&quot;)</p>"},{"id":"text-63","type":"text","heading":"","plain_text":"# tapez dans la recherche\n$ inputElement-&gt;send_keys(&quot;fromage!&quot;)","html":"<p># tapez dans la recherche\n$ inputElement-&gt;send_keys(&quot;fromage!&quot;)</p>"},{"id":"text-64","type":"text","heading":"","plain_text":"# soumettre le formulaire (bien que google recherche automatiquement maintenant sans soumettre)\n$ inputElement-&gt;soumettre();","html":"<p># soumettre le formulaire (bien que google recherche automatiquement maintenant sans soumettre)\n$ inputElement-&gt;soumettre();</p>"},{"id":"text-65","type":"text","heading":"","plain_text":"# Définissez le délai d&#39;expiration de la recherche d&#39;éléments sur 10 secondes (0 par défaut)\nconducteur $-&gt;set_implicit_wait_timeout(10000)\n# puis utilisez XPath pour rechercher un titre de page contenant du fromage!\nconducteur $-&gt;find_element(&quot;/ html / head / title[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'cheese!')]&quot;)","html":"<p># Définissez le délai d&#039;expiration de la recherche d&#039;éléments sur 10 secondes (0 par défaut)\nconducteur $-&gt;set_implicit_wait_timeout(10000)\n# puis utilisez XPath pour rechercher un titre de page contenant du fromage!\nconducteur $-&gt;find_element(&quot;/ html / head / title[contains(translate(., &#039;ABCDEFGHIJKLMNOPQRSTUVWXYZ&#039;, &#039;abcdefghijklmnopqrstuvwxyz&#039;), &#039;cheese!&#039;)]&quot;)</p>"},{"id":"text-66","type":"text","heading":"","plain_text":"# Vous devriez voir &quot;fromage! - Recherche Google&quot;\n$ title = conducteur $-&gt;get_title();\nimpression &quot;$ title  n&quot;;","html":"<p># Vous devriez voir &quot;fromage! - Recherche Google&quot;\n$ title = conducteur $-&gt;get_title();\nimpression &quot;$ title  n&quot;;</p>"},{"id":"text-67","type":"text","heading":"","plain_text":"conducteur $-&gt;quitter();","html":"<p>conducteur $-&gt;quitter();</p>"},{"id":"text-68","type":"text","heading":"","plain_text":"Dans les prochaines sections, vous en apprendrez plus sur l’utilisation de WebDriver pour des applications\ntelles que la navigation en avant et en arrière dans l’historique de votre navigateur, et comment\ntester des sites Web qui utilisent des cadres et des fenêtres. Nous fournissons également un plus\ndiscussions approfondies et exemples.","html":"<p>Dans les prochaines sections, vous en apprendrez plus sur l’utilisation de WebDriver pour des applications\ntelles que la navigation en avant et en arrière dans l’historique de votre navigateur, et comment\ntester des sites Web qui utilisent des cadres et des fenêtres. Nous fournissons également un plus\ndiscussions approfondies et exemples.</p>"},{"id":"text-69","type":"text","heading":"","plain_text":"Commandes et opérations de l&#39;API Selenium-WebDriver","html":"<p>Commandes et opérations de l&#039;API Selenium-WebDriver</p>"},{"id":"text-70","type":"text","heading":"","plain_text":"Aller chercher une page\nLa première chose que vous souhaiterez probablement faire avec WebDriver est d’accéder à une page.\nLa façon habituelle de faire ceci est d&#39;appeler “get”:","html":"<p>Aller chercher une page\nLa première chose que vous souhaiterez probablement faire avec WebDriver est d’accéder à une page.\nLa façon habituelle de faire ceci est d&#039;appeler “get”:</p>"},{"id":"text-71","type":"text","heading":"","plain_text":"chauffeur.obtenir(&quot;http://www.google.com&quot;)","html":"<p>chauffeur.obtenir(&quot;http://www.google.com&quot;)</p>"},{"id":"text-72","type":"text","heading":"","plain_text":"chauffeur.URL = &quot;http://www.google.com&quot;;","html":"<p>chauffeur.URL = &quot;http://www.google.com&quot;;</p>"},{"id":"text-73","type":"text","heading":"","plain_text":"chauffeur.obtenir &quot;http://www.google.com&quot;","html":"<p>chauffeur.obtenir &quot;http://www.google.com&quot;</p>"},{"id":"text-74","type":"text","heading":"","plain_text":"chauffeur.obtenir(&quot;http://www.google.com&quot;)","html":"<p>chauffeur.obtenir(&quot;http://www.google.com&quot;)</p>"},{"id":"text-75","type":"text","heading":"","plain_text":"conducteur $-&gt;obtenir(&quot;http://www.google.com&quot;)","html":"<p>conducteur $-&gt;obtenir(&quot;http://www.google.com&quot;)</p>"},{"id":"text-76","type":"text","heading":"","plain_text":"chauffeur.obtenir(&quot;http://www.google.com&quot;)","html":"<p>chauffeur.obtenir(&quot;http://www.google.com&quot;)</p>"},{"id":"text-77","type":"text","heading":"","plain_text":"Dépend de plusieurs facteurs, y compris la combinaison système d&#39;exploitation / navigateur,\nWebDriver peut attendre ou ne pas attendre le chargement de la page. Dans certaines circonstances,\nWebDriver peut rendre le contrôle avant que le chargement de la page soit terminé ou même commencé.\nPour assurer la robustesse, vous devez attendre que le ou les éléments existent dans la page à l&#39;aide de\nAttentes explicites et implicites.","html":"<p>Dépend de plusieurs facteurs, y compris la combinaison système d&#039;exploitation / navigateur,\nWebDriver peut attendre ou ne pas attendre le chargement de la page. Dans certaines circonstances,\nWebDriver peut rendre le contrôle avant que le chargement de la page soit terminé ou même commencé.\nPour assurer la robustesse, vous devez attendre que le ou les éléments existent dans la page à l&#039;aide de\nAttentes explicites et implicites.</p>"},{"id":"text-78","type":"text","heading":"","plain_text":"Localisation d&#39;éléments d&#39;interface utilisateur (WebElements)\nLa localisation d&#39;éléments dans WebDriver peut être effectuée sur l&#39;instance WebDriver elle-même ou sur un WebElement.\nChacune des liaisons de langue expose une méthode «Trouver élément» et «Trouver des éléments». L&#39;ancien retour\nun objet WebElement correspondant à la requête et lève une exception si un tel élément est introuvable.\nCe dernier renvoie une liste de WebElements, éventuellement vide si aucun élément DOM ne correspond à la requête.\nLes méthodes &quot;Rechercher&quot; prennent un objet de requête ou de localisateur appelé &quot;Par&quot;. Les stratégies «par» sont énumérées ci-dessous.","html":"<p>Localisation d&#039;éléments d&#039;interface utilisateur (WebElements)\nLa localisation d&#039;éléments dans WebDriver peut être effectuée sur l&#039;instance WebDriver elle-même ou sur un WebElement.\nChacune des liaisons de langue expose une méthode «Trouver élément» et «Trouver des éléments». L&#039;ancien retour\nun objet WebElement correspondant à la requête et lève une exception si un tel élément est introuvable.\nCe dernier renvoie une liste de WebElements, éventuellement vide si aucun élément DOM ne correspond à la requête.\nLes méthodes &quot;Rechercher&quot; prennent un objet de requête ou de localisateur appelé &quot;Par&quot;. Les stratégies «par» sont énumérées ci-dessous.</p>"},{"id":"text-79","type":"text","heading":"","plain_text":"Par ID\nC&#39;est le moyen le plus efficace et préféré de localiser un élément. Pièges courants que les développeurs d&#39;interface utilisateur\nmake est d&#39;avoir des identifiants non uniques sur une page ou de générer automatiquement l&#39;identifiant, les deux doivent être évités. Une classe\nsur un élément html est plus approprié qu&#39;un identifiant généré automatiquement.\nExemple de recherche d&#39;un élément ressemblant à ceci:","html":"<p>Par ID\nC&#039;est le moyen le plus efficace et préféré de localiser un élément. Pièges courants que les développeurs d&#039;interface utilisateur\nmake est d&#039;avoir des identifiants non uniques sur une page ou de générer automatiquement l&#039;identifiant, les deux doivent être évités. Une classe\nsur un élément html est plus approprié qu&#039;un identifiant généré automatiquement.\nExemple de recherche d&#039;un élément ressemblant à ceci:</p>"},{"id":"text-80","type":"text","heading":"","plain_text":"&lt;div identifiant=&quot;coolestWidgetEvah&quot;&gt;...&lt;/div&gt;","html":"<p>&lt;div identifiant=&quot;coolestWidgetEvah&quot;&gt;...&lt;/div&gt;</p>"},{"id":"text-81","type":"text","heading":"","plain_text":"WebElement élément = chauffeur.findElement(Par.identifiant(&quot;coolestWidgetEvah&quot;));","html":"<p>WebElement élément = chauffeur.findElement(Par.identifiant(&quot;coolestWidgetEvah&quot;));</p>"},{"id":"text-82","type":"text","heading":"","plain_text":"IWebElement élément = chauffeur.FindElement(Par.Id(&quot;coolestWidgetEvah&quot;));","html":"<p>IWebElement élément = chauffeur.FindElement(Par.Id(&quot;coolestWidgetEvah&quot;));</p>"},{"id":"text-83","type":"text","heading":"","plain_text":"élément = chauffeur.find_element(: id, &quot;coolestWidgetEvah&quot;)","html":"<p>élément = chauffeur.find_element(: id, &quot;coolestWidgetEvah&quot;)</p>"},{"id":"text-84","type":"text","heading":"","plain_text":"élément = chauffeur.find_element_by_id(&quot;coolestWidgetEvah&quot;)","html":"<p>élément = chauffeur.find_element_by_id(&quot;coolestWidgetEvah&quot;)</p>"},{"id":"text-85","type":"text","heading":"","plain_text":"ou","html":"<p>ou</p>"},{"id":"text-86","type":"text","heading":"","plain_text":"de selenium.webdriver.common.by importation Par\nélément = chauffeur.find_element(par=Par.ID, valeur=&quot;coolestWidgetEvah&quot;)","html":"<p>de selenium.webdriver.common.by importation Par\nélément = chauffeur.find_element(par=Par.ID, valeur=&quot;coolestWidgetEvah&quot;)</p>"},{"id":"text-87","type":"text","heading":"","plain_text":"élément $ = conducteur $-&gt;find_element(&#39;coolestWidgetEvah&#39;,&#39;id&#39;)","html":"<p>élément $ = conducteur $-&gt;find_element(&#039;coolestWidgetEvah&#039;,&#039;id&#039;)</p>"},{"id":"text-88","type":"text","heading":"","plain_text":"var élément = chauffeur.findElement(Par.identifiant(&#39;coolestWidgetEvah&#39;));","html":"<p>var élément = chauffeur.findElement(Par.identifiant(&#039;coolestWidgetEvah&#039;));</p>"},{"id":"text-89","type":"text","heading":"","plain_text":"Par nom de classe\n“Classe” dans ce cas fait référence à l&#39;attribut sur l&#39;élément DOM. Souvent, dans la pratique, il y a\nde nombreux éléments DOM avec le même nom de classe, la recherche de plusieurs éléments devient alors la solution la plus pratique.\noption sur la recherche du premier élément.\nExemple de recherche d&#39;un élément ressemblant à ceci:","html":"<p>Par nom de classe\n“Classe” dans ce cas fait référence à l&#039;attribut sur l&#039;élément DOM. Souvent, dans la pratique, il y a\nde nombreux éléments DOM avec le même nom de classe, la recherche de plusieurs éléments devient alors la solution la plus pratique.\noption sur la recherche du premier élément.\nExemple de recherche d&#039;un élément ressemblant à ceci:</p>"},{"id":"text-90","type":"text","heading":"","plain_text":"&lt;div classe=&quot;fromage&quot;&gt; &lt;envergure&gt;Cheddar&lt;/envergure&gt; &lt;/div&gt; &lt;div classe=&quot;fromage&quot;&gt; &lt;envergure&gt;Gouda&lt;/envergure&gt; &lt;/div&gt;","html":"<p>&lt;div classe=&quot;fromage&quot;&gt; &lt;envergure&gt;Cheddar&lt;/envergure&gt; &lt;/div&gt; &lt;div classe=&quot;fromage&quot;&gt; &lt;envergure&gt;Gouda&lt;/envergure&gt; &lt;/div&gt;</p>"},{"id":"text-91","type":"text","heading":"","plain_text":"liste&lt;WebElement&gt; les fromages = chauffeur.findElements(Par.nom du cours(&quot;fromage&quot;));","html":"<p>liste&lt;WebElement&gt; les fromages = chauffeur.findElements(Par.nom du cours(&quot;fromage&quot;));</p>"},{"id":"text-92","type":"text","heading":"","plain_text":"IListe&lt;IWebElement&gt; les fromages = chauffeur.FindElements(Par.Nom du cours(&quot;fromage&quot;));","html":"<p>IListe&lt;IWebElement&gt; les fromages = chauffeur.FindElements(Par.Nom du cours(&quot;fromage&quot;));</p>"},{"id":"text-93","type":"text","heading":"","plain_text":"les fromages = chauffeur.find_elements(:nom du cours, &quot;fromage&quot;)","html":"<p>les fromages = chauffeur.find_elements(:nom du cours, &quot;fromage&quot;)</p>"},{"id":"text-94","type":"text","heading":"","plain_text":"ou","html":"<p>ou</p>"},{"id":"text-95","type":"text","heading":"","plain_text":"les fromages = chauffeur.find_elements(:classe, &quot;fromage&quot;)","html":"<p>les fromages = chauffeur.find_elements(:classe, &quot;fromage&quot;)</p>"},{"id":"text-96","type":"text","heading":"","plain_text":"les fromages = chauffeur.find_elements_by_class_name(&quot;fromage&quot;)","html":"<p>les fromages = chauffeur.find_elements_by_class_name(&quot;fromage&quot;)</p>"},{"id":"text-97","type":"text","heading":"","plain_text":"ou","html":"<p>ou</p>"},{"id":"text-98","type":"text","heading":"","plain_text":"de selenium.webdriver.common.by importation Par\nles fromages = chauffeur.find_elements(Par.NOM DU COURS, &quot;fromage&quot;)","html":"<p>de selenium.webdriver.common.by importation Par\nles fromages = chauffeur.find_elements(Par.NOM DU COURS, &quot;fromage&quot;)</p>"},{"id":"text-99","type":"text","heading":"","plain_text":"@les fromages = conducteur $-&gt;find_elements(&#39;fromage&#39;, &#39;classe&#39;)","html":"<p>@les fromages = conducteur $-&gt;find_elements(&#039;fromage&#039;, &#039;classe&#039;)</p>"},{"id":"text-100","type":"text","heading":"","plain_text":"chauffeur.findElements(Par.nom du cours(&quot;fromage&quot;))\n.puis(les fromages =&gt; console.bûche(les fromages.longueur));","html":"<p>chauffeur.findElements(Par.nom du cours(&quot;fromage&quot;))\n.puis(les fromages =&gt; console.bûche(les fromages.longueur));</p>"},{"id":"text-101","type":"text","heading":"","plain_text":"Par nom de tag\nLe nom de la balise DOM de l&#39;élément.\nExemple de recherche d&#39;un élément ressemblant à ceci:","html":"<p>Par nom de tag\nLe nom de la balise DOM de l&#039;élément.\nExemple de recherche d&#039;un élément ressemblant à ceci:</p>"},{"id":"text-102","type":"text","heading":"","plain_text":"&lt;iframe src=&quot;...&quot;&gt; &lt;/iframe&gt;","html":"<p>&lt;iframe src=&quot;...&quot;&gt; &lt;/iframe&gt;</p>"},{"id":"text-103","type":"text","heading":"","plain_text":"WebElement Cadre = chauffeur.findElement(Par.tagName(&quot;iframe&quot;));","html":"<p>WebElement Cadre = chauffeur.findElement(Par.tagName(&quot;iframe&quot;));</p>"},{"id":"text-104","type":"text","heading":"","plain_text":"IWebElement Cadre = chauffeur.FindElement(Par.TagName(&quot;iframe&quot;));","html":"<p>IWebElement Cadre = chauffeur.FindElement(Par.TagName(&quot;iframe&quot;));</p>"},{"id":"text-105","type":"text","heading":"","plain_text":"Cadre = chauffeur.find_element(: tag_name, &quot;iframe&quot;)","html":"<p>Cadre = chauffeur.find_element(: tag_name, &quot;iframe&quot;)</p>"},{"id":"text-106","type":"text","heading":"","plain_text":"Cadre = chauffeur.find_element_by_tag_name(&quot;iframe&quot;)","html":"<p>Cadre = chauffeur.find_element_by_tag_name(&quot;iframe&quot;)</p>"},{"id":"text-107","type":"text","heading":"","plain_text":"ou","html":"<p>ou</p>"},{"id":"text-108","type":"text","heading":"","plain_text":"de selenium.webdriver.common.by importation Par\nCadre = chauffeur.find_element(Par.TAG_NAME, &quot;iframe&quot;)","html":"<p>de selenium.webdriver.common.by importation Par\nCadre = chauffeur.find_element(Par.TAG_NAME, &quot;iframe&quot;)</p>"},{"id":"text-109","type":"text","heading":"","plain_text":"$ frame = conducteur $-&gt;find_element(&#39;iframe&#39;, &#39;tag_name&#39;)","html":"<p>$ frame = conducteur $-&gt;find_element(&#039;iframe&#039;, &#039;tag_name&#039;)</p>"},{"id":"text-110","type":"text","heading":"","plain_text":"var Cadre = chauffeur.findElement(Par.tagName(&#39;iframe&#39;));","html":"<p>var Cadre = chauffeur.findElement(Par.tagName(&#039;iframe&#039;));</p>"},{"id":"text-111","type":"text","heading":"","plain_text":"De nom\nRecherchez l&#39;élément d&#39;entrée avec l&#39;attribut name correspondant.\nExemple de recherche d&#39;un élément ressemblant à ceci:","html":"<p>De nom\nRecherchez l&#039;élément d&#039;entrée avec l&#039;attribut name correspondant.\nExemple de recherche d&#039;un élément ressemblant à ceci:</p>"},{"id":"text-112","type":"text","heading":"","plain_text":"&lt;contribution prénom=&quot;fromage&quot; type=&quot;texte&quot;/&gt;","html":"<p>&lt;contribution prénom=&quot;fromage&quot; type=&quot;texte&quot;/&gt;</p>"},{"id":"text-113","type":"text","heading":"","plain_text":"WebElement fromage = chauffeur.findElement(Par.prénom(&quot;fromage&quot;));","html":"<p>WebElement fromage = chauffeur.findElement(Par.prénom(&quot;fromage&quot;));</p>"},{"id":"text-114","type":"text","heading":"","plain_text":"IWebElement fromage = chauffeur.FindElement(Par.prénom(&quot;fromage&quot;));","html":"<p>IWebElement fromage = chauffeur.FindElement(Par.prénom(&quot;fromage&quot;));</p>"},{"id":"text-115","type":"text","heading":"","plain_text":"fromage = chauffeur.find_element(:prénom, &quot;fromage&quot;)","html":"<p>fromage = chauffeur.find_element(:prénom, &quot;fromage&quot;)</p>"},{"id":"text-116","type":"text","heading":"","plain_text":"fromage = chauffeur.find_element_by_name(&quot;fromage&quot;)","html":"<p>fromage = chauffeur.find_element_by_name(&quot;fromage&quot;)</p>"},{"id":"text-117","type":"text","heading":"","plain_text":"ou","html":"<p>ou</p>"},{"id":"text-118","type":"text","heading":"","plain_text":"de selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.PRÉNOM, &quot;fromage&quot;)","html":"<p>de selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.PRÉNOM, &quot;fromage&quot;)</p>"},{"id":"text-119","type":"text","heading":"","plain_text":"$ fromage = conducteur $-&gt;find_element(&#39;fromage&#39;, &#39;prénom&#39;)","html":"<p>$ fromage = conducteur $-&gt;find_element(&#039;fromage&#039;, &#039;prénom&#039;)</p>"},{"id":"text-120","type":"text","heading":"","plain_text":"var fromage = chauffeur.findElement(Par.prénom(&#39;fromage&#39;));","html":"<p>var fromage = chauffeur.findElement(Par.prénom(&#039;fromage&#039;));</p>"},{"id":"text-121","type":"text","heading":"","plain_text":"Par lien texte\nRecherchez l&#39;élément de lien avec le texte visible correspondant.\nExemple de recherche d&#39;un élément ressemblant à ceci:","html":"<p>Par lien texte\nRecherchez l&#039;élément de lien avec le texte visible correspondant.\nExemple de recherche d&#039;un élément ressemblant à ceci:</p>"},{"id":"text-122","type":"text","heading":"","plain_text":"&lt;une href=&quot;http://www.google.com/search?q=cheese&quot;&gt;fromage&lt;/une&gt;&gt;","html":"<p>&lt;une href=&quot;http://www.google.com/search?q=cheese&quot;&gt;fromage&lt;/une&gt;&gt;</p>"},{"id":"text-123","type":"text","heading":"","plain_text":"WebElement fromage = chauffeur.findElement(Par.linkText(&quot;fromage&quot;));","html":"<p>WebElement fromage = chauffeur.findElement(Par.linkText(&quot;fromage&quot;));</p>"},{"id":"text-124","type":"text","heading":"","plain_text":"IWebElement fromage = chauffeur.FindElement(Par.LinkText(&quot;fromage&quot;));","html":"<p>IWebElement fromage = chauffeur.FindElement(Par.LinkText(&quot;fromage&quot;));</p>"},{"id":"text-125","type":"text","heading":"","plain_text":"fromage = chauffeur.find_element(: link_text, &quot;fromage&quot;)","html":"<p>fromage = chauffeur.find_element(: link_text, &quot;fromage&quot;)</p>"},{"id":"text-126","type":"text","heading":"","plain_text":"ou","html":"<p>ou</p>"},{"id":"text-127","type":"text","heading":"","plain_text":"fromage = chauffeur.find_element(:lien, &quot;fromage&quot;)","html":"<p>fromage = chauffeur.find_element(:lien, &quot;fromage&quot;)</p>"},{"id":"text-128","type":"text","heading":"","plain_text":"fromage = chauffeur.find_element_by_link_text(&quot;fromage&quot;)","html":"<p>fromage = chauffeur.find_element_by_link_text(&quot;fromage&quot;)</p>"},{"id":"text-129","type":"text","heading":"","plain_text":"ou","html":"<p>ou</p>"},{"id":"text-130","type":"text","heading":"","plain_text":"de selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.LINK_TEXT, &quot;fromage&quot;)","html":"<p>de selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.LINK_TEXT, &quot;fromage&quot;)</p>"},{"id":"text-131","type":"text","heading":"","plain_text":"$ fromage = conducteur $-&gt;find_element(&#39;fromage&#39;, &#39;link_text&#39;)","html":"<p>$ fromage = conducteur $-&gt;find_element(&#039;fromage&#039;, &#039;link_text&#039;)</p>"},{"id":"text-132","type":"text","heading":"","plain_text":"var fromage = chauffeur.findElement(Par.linkText(&#39;fromage&#39;));","html":"<p>var fromage = chauffeur.findElement(Par.linkText(&#039;fromage&#039;));</p>"},{"id":"text-133","type":"text","heading":"","plain_text":"Par texte de lien partiel\nRecherchez l&#39;élément de lien avec du texte visible correspondant partiellement.\nExemple de recherche d&#39;un élément ressemblant à ceci:","html":"<p>Par texte de lien partiel\nRecherchez l&#039;élément de lien avec du texte visible correspondant partiellement.\nExemple de recherche d&#039;un élément ressemblant à ceci:</p>"},{"id":"text-134","type":"text","heading":"","plain_text":"&lt;une href=&quot;http://www.google.com/search?q=cheese&quot;&gt;recherche de fromage&lt;/une&gt;&gt;","html":"<p>&lt;une href=&quot;http://www.google.com/search?q=cheese&quot;&gt;recherche de fromage&lt;/une&gt;&gt;</p>"},{"id":"text-135","type":"text","heading":"","plain_text":"WebElement fromage = chauffeur.findElement(Par.partialLinkText(&quot;fromage&quot;));","html":"<p>WebElement fromage = chauffeur.findElement(Par.partialLinkText(&quot;fromage&quot;));</p>"},{"id":"text-136","type":"text","heading":"","plain_text":"IWebElement fromage = chauffeur.FindElement(Par.PartialLinkText(&quot;fromage&quot;));","html":"<p>IWebElement fromage = chauffeur.FindElement(Par.PartialLinkText(&quot;fromage&quot;));</p>"},{"id":"text-137","type":"text","heading":"","plain_text":"fromage = chauffeur.find_element(: partial_link_text, &quot;fromage&quot;)","html":"<p>fromage = chauffeur.find_element(: partial_link_text, &quot;fromage&quot;)</p>"},{"id":"text-138","type":"text","heading":"","plain_text":"fromage = chauffeur.find_element_by_partial_link_text(&quot;fromage&quot;)","html":"<p>fromage = chauffeur.find_element_by_partial_link_text(&quot;fromage&quot;)</p>"},{"id":"text-139","type":"text","heading":"","plain_text":"ou","html":"<p>ou</p>"},{"id":"text-140","type":"text","heading":"","plain_text":"de selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.PARTIAL_LINK_TEXT, &quot;fromage&quot;)","html":"<p>de selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.PARTIAL_LINK_TEXT, &quot;fromage&quot;)</p>"},{"id":"text-141","type":"text","heading":"","plain_text":"$ fromage = conducteur $-&gt;find_element(&#39;fromage&#39;, &#39;partial_link_text&#39;)","html":"<p>$ fromage = conducteur $-&gt;find_element(&#039;fromage&#039;, &#039;partial_link_text&#039;)</p>"},{"id":"text-142","type":"text","heading":"","plain_text":"var fromage = chauffeur.findElement(Par.partialLinkText(&#39;fromage&#39;));","html":"<p>var fromage = chauffeur.findElement(Par.partialLinkText(&#039;fromage&#039;));</p>"},{"id":"text-143","type":"text","heading":"","plain_text":"Par CSS\nComme son nom l&#39;indique, il s&#39;agit d&#39;une stratégie de localisation par css. Prise en charge du navigateur natif\nest utilisé par défaut, veuillez donc vous référer aux sélecteurs CSS de w3c pour obtenir une liste des sélecteurs CSS disponibles. Si un navigateur n&#39;a pas\nsupport natif pour les requêtes css, alors Sizzle est utilisé. IE 6,7 et FF3,0\nutilise actuellement Sizzle comme moteur de requête css.\nAttention, tous les navigateurs n&#39;ont pas été créés égaux. Certains CSS pouvant fonctionner dans une version peuvent ne pas fonctionner.\nen autre.\nExemple de trouver le fromage ci-dessous:","html":"<p>Par CSS\nComme son nom l&#039;indique, il s&#039;agit d&#039;une stratégie de localisation par css. Prise en charge du navigateur natif\nest utilisé par défaut, veuillez donc vous référer aux sélecteurs CSS de w3c pour obtenir une liste des sélecteurs CSS disponibles. Si un navigateur n&#039;a pas\nsupport natif pour les requêtes css, alors Sizzle est utilisé. IE 6,7 et FF3,0\nutilise actuellement Sizzle comme moteur de requête css.\nAttention, tous les navigateurs n&#039;ont pas été créés égaux. Certains CSS pouvant fonctionner dans une version peuvent ne pas fonctionner.\nen autre.\nExemple de trouver le fromage ci-dessous:</p>"},{"id":"text-144","type":"text","heading":"","plain_text":"&lt;div identifiant=&quot;aliments&quot;&gt; &lt;envergure classe=&quot;laitier&quot;&gt;Lait&lt;/envergure&gt; &lt;envergure classe=&quot;laiterie vieillie&quot;&gt;fromage&lt;/envergure&gt; &lt;/div&gt;","html":"<p>&lt;div identifiant=&quot;aliments&quot;&gt; &lt;envergure classe=&quot;laitier&quot;&gt;Lait&lt;/envergure&gt; &lt;envergure classe=&quot;laiterie vieillie&quot;&gt;fromage&lt;/envergure&gt; &lt;/div&gt;</p>"},{"id":"text-145","type":"text","heading":"","plain_text":"WebElement fromage = chauffeur.findElement(Par.cssSelector(&quot;#food span.dairy.aged&quot;));","html":"<p>WebElement fromage = chauffeur.findElement(Par.cssSelector(&quot;#food span.dairy.aged&quot;));</p>"},{"id":"text-146","type":"text","heading":"","plain_text":"IWebElement fromage = chauffeur.FindElement(Par.CssSélecteur(&quot;#food span.dairy.aged&quot;));","html":"<p>IWebElement fromage = chauffeur.FindElement(Par.CssSélecteur(&quot;#food span.dairy.aged&quot;));</p>"},{"id":"text-147","type":"text","heading":"","plain_text":"fromage = chauffeur.find_element(: css, &quot;#food span.dairy.aged&quot;)","html":"<p>fromage = chauffeur.find_element(: css, &quot;#food span.dairy.aged&quot;)</p>"},{"id":"text-148","type":"text","heading":"","plain_text":"fromage = chauffeur.find_element_by_css_selector(&quot;#food span.dairy.aged&quot;)","html":"<p>fromage = chauffeur.find_element_by_css_selector(&quot;#food span.dairy.aged&quot;)</p>"},{"id":"text-149","type":"text","heading":"","plain_text":"ou","html":"<p>ou</p>"},{"id":"text-150","type":"text","heading":"","plain_text":"de selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.CSS_SELECTOR, &quot;#food span.dairy.aged&quot;)","html":"<p>de selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.CSS_SELECTOR, &quot;#food span.dairy.aged&quot;)</p>"},{"id":"text-151","type":"text","heading":"","plain_text":"$ fromage = conducteur $-&gt;find_element(&#39;#food span.dairy.aged&#39;, &#39;css&#39;)","html":"<p>$ fromage = conducteur $-&gt;find_element(&#039;#food span.dairy.aged&#039;, &#039;css&#039;)</p>"},{"id":"text-152","type":"text","heading":"","plain_text":"var fromage = chauffeur.findElement(Par.css(&#39;#food span.dairy.aged&#39;));","html":"<p>var fromage = chauffeur.findElement(Par.css(&#039;#food span.dairy.aged&#039;));</p>"},{"id":"text-153","type":"text","heading":"","plain_text":"Par XPath\nÀ un niveau élevé, WebDriver utilise les fonctionnalités XPath natives d’un navigateur partout\npossible. Sur les navigateurs qui ne prennent pas en charge XPath en natif, nous avons\nfourni notre propre mise en œuvre. Cela peut conduire à un comportement inattendu\nà moins que vous ne connaissiez les différences entre les différents moteurs XPath.\nCeci est un petit résumé, donc pour le morceau de HTML suivant:","html":"<p>Par XPath\nÀ un niveau élevé, WebDriver utilise les fonctionnalités XPath natives d’un navigateur partout\npossible. Sur les navigateurs qui ne prennent pas en charge XPath en natif, nous avons\nfourni notre propre mise en œuvre. Cela peut conduire à un comportement inattendu\nà moins que vous ne connaissiez les différences entre les différents moteurs XPath.\nCeci est un petit résumé, donc pour le morceau de HTML suivant:</p>"},{"id":"text-154","type":"text","heading":"","plain_text":"&lt;contribution type=&quot;texte&quot; prénom=&quot;Exemple&quot; /&gt;\n&lt;CONTRIBUTION type=&quot;texte&quot; prénom=&quot;autre&quot; /&gt;","html":"<p>&lt;contribution type=&quot;texte&quot; prénom=&quot;Exemple&quot; /&gt;\n&lt;CONTRIBUTION type=&quot;texte&quot; prénom=&quot;autre&quot; /&gt;</p>"},{"id":"text-155","type":"text","heading":"","plain_text":"liste&lt;WebElement&gt; contributions = chauffeur.findElements(Par.xpath(&quot;//contribution&quot;));","html":"<p>liste&lt;WebElement&gt; contributions = chauffeur.findElements(Par.xpath(&quot;//contribution&quot;));</p>"},{"id":"text-156","type":"text","heading":"","plain_text":"IListe&lt;IWebElement&gt; contributions = chauffeur.FindElements(Par.XPath(&quot;//contribution&quot;));","html":"<p>IListe&lt;IWebElement&gt; contributions = chauffeur.FindElements(Par.XPath(&quot;//contribution&quot;));</p>"},{"id":"text-157","type":"text","heading":"","plain_text":"contributions = chauffeur.find_elements(: xpath, &quot;//contribution&quot;)","html":"<p>contributions = chauffeur.find_elements(: xpath, &quot;//contribution&quot;)</p>"},{"id":"text-158","type":"text","heading":"","plain_text":"contributions = chauffeur.find_elements_by_xpath(&quot;//contribution&quot;)","html":"<p>contributions = chauffeur.find_elements_by_xpath(&quot;//contribution&quot;)</p>"},{"id":"text-159","type":"text","heading":"","plain_text":"ou","html":"<p>ou</p>"},{"id":"text-160","type":"text","heading":"","plain_text":"de selenium.webdriver.common.by importation Par\ncontributions = chauffeur.find_elements(Par.XPATH, &quot;//contribution&quot;)","html":"<p>de selenium.webdriver.common.by importation Par\ncontributions = chauffeur.find_elements(Par.XPATH, &quot;//contribution&quot;)</p>"},{"id":"text-161","type":"text","heading":"","plain_text":"@contributions = conducteur $-&gt;find_elements(&#39;//contribution&#39;)","html":"<p>@contributions = conducteur $-&gt;find_elements(&#039;//contribution&#039;)</p>"},{"id":"text-162","type":"text","heading":"","plain_text":"chauffeur.findElements(Par.xpath(&quot;//contribution&quot;))\n.puis(les fromages =&gt; console.bûche(les fromages.longueur));","html":"<p>chauffeur.findElements(Par.xpath(&quot;//contribution&quot;))\n.puis(les fromages =&gt; console.bûche(les fromages.longueur));</p>"},{"id":"text-163","type":"text","heading":"","plain_text":"Le nombre de correspondances suivantes sera trouvé\nParfois, les éléments HTML n&#39;ont pas besoin d&#39;attributs pour être explicitement déclarés\nparce qu&#39;ils vont par défaut aux valeurs connues. Par exemple, la balise «input» ne\npas besoin de l’attribut «type» car il utilise par défaut «text». La règle de\npouce lorsque vous utilisez xpath dans WebDriver est que vous ne devrait pas attendez-vous à pouvoir\nfaire correspondre à ces attributs implicites.","html":"<p>Le nombre de correspondances suivantes sera trouvé\nParfois, les éléments HTML n&#039;ont pas besoin d&#039;attributs pour être explicitement déclarés\nparce qu&#039;ils vont par défaut aux valeurs connues. Par exemple, la balise «input» ne\npas besoin de l’attribut «type» car il utilise par défaut «text». La règle de\npouce lorsque vous utilisez xpath dans WebDriver est que vous ne devrait pas attendez-vous à pouvoir\nfaire correspondre à ces attributs implicites.</p>"},{"id":"text-164","type":"text","heading":"","plain_text":"Utiliser JavaScript\nVous pouvez exécuter du javascript arbitraire pour trouver un élément et tant que vous retournez un élément DOM,\nil sera automatiquement converti en objet WebElement.\nExemple simple sur une page sur laquelle jQuery est chargé:","html":"<p>Utiliser JavaScript\nVous pouvez exécuter du javascript arbitraire pour trouver un élément et tant que vous retournez un élément DOM,\nil sera automatiquement converti en objet WebElement.\nExemple simple sur une page sur laquelle jQuery est chargé:</p>"},{"id":"text-165","type":"text","heading":"","plain_text":"WebElement élément = (WebElement) ((JavascriptExecutor)chauffeur).executeScript(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)","html":"<p>WebElement élément = (WebElement) ((JavascriptExecutor)chauffeur).executeScript(&quot;retour $ (&#039;. fromage&#039;)[0]&quot;)</p>"},{"id":"text-166","type":"text","heading":"","plain_text":"IWebElement élément = (IWebElement) ((IJavaScriptExecutor)chauffeur).ExecuteScript(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)","html":"<p>IWebElement élément = (IWebElement) ((IJavaScriptExecutor)chauffeur).ExecuteScript(&quot;retour $ (&#039;. fromage&#039;)[0]&quot;)</p>"},{"id":"text-167","type":"text","heading":"","plain_text":"élément = chauffeur.execute_script(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)","html":"<p>élément = chauffeur.execute_script(&quot;retour $ (&#039;. fromage&#039;)[0]&quot;)</p>"},{"id":"text-168","type":"text","heading":"","plain_text":"élément = chauffeur.execute_script(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)","html":"<p>élément = chauffeur.execute_script(&quot;retour $ (&#039;. fromage&#039;)[0]&quot;)</p>"},{"id":"text-169","type":"text","heading":"","plain_text":"élément = conducteur $-&gt;execute_script(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)","html":"<p>élément = conducteur $-&gt;execute_script(&quot;retour $ (&#039;. fromage&#039;)[0]&quot;)</p>"},{"id":"text-170","type":"text","heading":"","plain_text":"Trouver tous les éléments d&#39;entrée pour chaque étiquette sur une page:","html":"<p>Trouver tous les éléments d&#039;entrée pour chaque étiquette sur une page:</p>"},{"id":"text-171","type":"text","heading":"","plain_text":"liste&lt;WebElement&gt; Étiquettes = chauffeur.findElements(Par.tagName(&quot;étiquette&quot;));\nliste&lt;WebElement&gt; contributions = (liste&lt;WebElement&gt;) ((JavascriptExecutor)chauffeur).executeScript(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, Étiquettes)","html":"<p>liste&lt;WebElement&gt; Étiquettes = chauffeur.findElements(Par.tagName(&quot;étiquette&quot;));\nliste&lt;WebElement&gt; contributions = (liste&lt;WebElement&gt;) ((JavascriptExecutor)chauffeur).executeScript(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#039;for&#039;)));  retourne les entrées; &quot;, Étiquettes)</p>"},{"id":"text-172","type":"text","heading":"","plain_text":"IListe&lt;IWebElement&gt; Étiquettes = chauffeur.FindElements(Par.TagName(&quot;étiquette&quot;));\nIListe&lt;IWebElement&gt; contributions = (IListe&lt;IWebElement&gt;) ((IJavaScriptExecutor)chauffeur).ExecuteScript(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, Étiquettes)","html":"<p>IListe&lt;IWebElement&gt; Étiquettes = chauffeur.FindElements(Par.TagName(&quot;étiquette&quot;));\nIListe&lt;IWebElement&gt; contributions = (IListe&lt;IWebElement&gt;) ((IJavaScriptExecutor)chauffeur).ExecuteScript(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#039;for&#039;)));  retourne les entrées; &quot;, Étiquettes)</p>"},{"id":"text-173","type":"text","heading":"","plain_text":"Étiquettes = chauffeur.find_elements(: tag_name, &quot;étiquette&quot;)\ncontributions = chauffeur.execute_script(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, Étiquettes)","html":"<p>Étiquettes = chauffeur.find_elements(: tag_name, &quot;étiquette&quot;)\ncontributions = chauffeur.execute_script(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#039;for&#039;)));  retourne les entrées; &quot;, Étiquettes)</p>"},{"id":"text-174","type":"text","heading":"","plain_text":"Étiquettes = chauffeur.find_elements_by_tag_name(&quot;étiquette&quot;)\ncontributions = chauffeur.execute_script(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, Étiquettes)","html":"<p>Étiquettes = chauffeur.find_elements_by_tag_name(&quot;étiquette&quot;)\ncontributions = chauffeur.execute_script(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#039;for&#039;)));  retourne les entrées; &quot;, Étiquettes)</p>"},{"id":"text-175","type":"text","heading":"","plain_text":"mon @Étiquettes = conducteur $-&gt;find_elements(&#39;étiquette&#39;, &#39;tag_name&#39;)\nmon $ entrées = conducteur $-&gt;execute_script(&quot;var labels = arguments, input = []; pour (var i = 0; i &lt;labels.length; i ++) inputs.push (document.getElementById (labels[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, @Étiquettes)","html":"<p>mon @Étiquettes = conducteur $-&gt;find_elements(&#039;étiquette&#039;, &#039;tag_name&#039;)\nmon $ entrées = conducteur $-&gt;execute_script(&quot;var labels = arguments, input = []; pour (var i = 0; i &lt;labels.length; i ++) inputs.push (document.getElementById (labels[i].getAttribute (&#039;for&#039;)));  retourne les entrées; &quot;, @Étiquettes)</p>"},{"id":"text-176","type":"text","heading":"","plain_text":"Obtenir des valeurs de texte\nLes utilisateurs souhaitent souvent récupérer la valeur innerText contenue dans un élément. Cela renvoie une valeur de chaîne unique. Notez que cela ne fera que renvoyer le texte visible affiché sur la page.","html":"<p>Obtenir des valeurs de texte\nLes utilisateurs souhaitent souvent récupérer la valeur innerText contenue dans un élément. Cela renvoie une valeur de chaîne unique. Notez que cela ne fera que renvoyer le texte visible affiché sur la page.</p>"},{"id":"text-177","type":"text","heading":"","plain_text":"WebElement élément = chauffeur.findElement(Par.identifiant(&quot;elementID&quot;));\nélément.getText();","html":"<p>WebElement élément = chauffeur.findElement(Par.identifiant(&quot;elementID&quot;));\nélément.getText();</p>"},{"id":"text-178","type":"text","heading":"","plain_text":"IWebElement élément = chauffeur.findElement(Par.identifiant(&quot;elementID&quot;));\nélément.Texte;","html":"<p>IWebElement élément = chauffeur.findElement(Par.identifiant(&quot;elementID&quot;));\nélément.Texte;</p>"},{"id":"text-179","type":"text","heading":"","plain_text":"élément = chauffeur.find_element : id =&gt; &quot;element_id&quot;\nélément.texte","html":"<p>élément = chauffeur.find_element : id =&gt; &quot;element_id&quot;\nélément.texte</p>"},{"id":"text-180","type":"text","heading":"","plain_text":"élément = chauffeur.find_element_by_id(&quot;element_id&quot;)\nélément.texte","html":"<p>élément = chauffeur.find_element_by_id(&quot;element_id&quot;)\nélément.texte</p>"},{"id":"text-181","type":"text","heading":"","plain_text":"var element = driver.findElement (By.id (&#39;elementID&#39;));\nelement.getText (). then (text =&gt; console.log (`Text is $ text`));","html":"<p>var element = driver.findElement (By.id (&#039;elementID&#039;));\nelement.getText (). then (text =&gt; console.log (`Text is $ text`));</p>"},{"id":"text-182","type":"text","heading":"","plain_text":"Entrée utilisateur &#8211; Remplir des formulaires\nNous avons déjà vu comment saisir du texte dans une zone de texte ou un champ de texte, mais\nsur les autres éléments? Vous pouvez &quot;basculer&quot; l’état des cases à cocher, et vous\npouvez cliquer sur «cliquer» pour définir quelque chose comme une balise OPTION sélectionnée. Transaction\navec les balises SELECT n’est pas si mal:","html":"<p>Entrée utilisateur &#8211; Remplir des formulaires\nNous avons déjà vu comment saisir du texte dans une zone de texte ou un champ de texte, mais\nsur les autres éléments? Vous pouvez &quot;basculer&quot; l’état des cases à cocher, et vous\npouvez cliquer sur «cliquer» pour définir quelque chose comme une balise OPTION sélectionnée. Transaction\navec les balises SELECT n’est pas si mal:</p>"},{"id":"text-183","type":"text","heading":"","plain_text":"WebElement sélectionner = chauffeur.findElement(Par.tagName(&quot;sélectionner&quot;));\nliste&lt;WebElement&gt; toutes les options = sélectionner.findElements(Par.tagName(&quot;option&quot;));\npour (WebElement option : toutes les options) \n    Système.en dehors.imprimer(Chaîne.format(&quot;La valeur est:% s&quot;, option.obtenirAttribuer(&quot;valeur&quot;)));\n    option.Cliquez sur();","html":"<p>WebElement sélectionner = chauffeur.findElement(Par.tagName(&quot;sélectionner&quot;));\nliste&lt;WebElement&gt; toutes les options = sélectionner.findElements(Par.tagName(&quot;option&quot;));\npour (WebElement option : toutes les options) \n    Système.en dehors.imprimer(Chaîne.format(&quot;La valeur est:% s&quot;, option.obtenirAttribuer(&quot;valeur&quot;)));\n    option.Cliquez sur();</p>"},{"id":"text-184","type":"text","heading":"","plain_text":"IWebElement sélectionner = chauffeur.FindElement(Par.TagName(&quot;sélectionner&quot;));\nIListe&lt;IWebElement&gt; toutes les options = sélectionner.FindElements(Par.TagName(&quot;option&quot;));\npour chaque (IWebElement option dans toutes les options)","html":"<p>IWebElement sélectionner = chauffeur.FindElement(Par.TagName(&quot;sélectionner&quot;));\nIListe&lt;IWebElement&gt; toutes les options = sélectionner.FindElements(Par.TagName(&quot;option&quot;));\npour chaque (IWebElement option dans toutes les options)</p>"},{"id":"text-185","type":"text","heading":"","plain_text":"Console.WriteLine(&quot;La valeur est: &quot; + option.GetAttribute(&quot;valeur&quot;));\n    option.Cliquez sur();","html":"<p>Console.WriteLine(&quot;La valeur est: &quot; + option.GetAttribute(&quot;valeur&quot;));\n    option.Cliquez sur();</p>"},{"id":"text-186","type":"text","heading":"","plain_text":"sélectionner = chauffeur.find_element(: tag_name, &quot;sélectionner&quot;)\ntoutes les options = sélectionner.find_elements(: tag_name, &quot;option&quot;)\ntoutes les options.chaque faire |option|\n  met &quot;La valeur est: &quot; + option.attribut(&quot;valeur&quot;)\n  option.Cliquez sur\nfin","html":"<p>sélectionner = chauffeur.find_element(: tag_name, &quot;sélectionner&quot;)\ntoutes les options = sélectionner.find_elements(: tag_name, &quot;option&quot;)\ntoutes les options.chaque faire |option|\n  met &quot;La valeur est: &quot; + option.attribut(&quot;valeur&quot;)\n  option.Cliquez sur\nfin</p>"},{"id":"text-187","type":"text","heading":"","plain_text":"sélectionner = chauffeur.find_element_by_tag_name(&quot;sélectionner&quot;)\ntoutes les options = sélectionner.find_elements_by_tag_name(&quot;option&quot;)\npour option dans toutes les options:\n    impression &quot;La valeur est: &quot; + option.get_attribute(&quot;valeur&quot;)\n    option.Cliquez sur()","html":"<p>sélectionner = chauffeur.find_element_by_tag_name(&quot;sélectionner&quot;)\ntoutes les options = sélectionner.find_elements_by_tag_name(&quot;option&quot;)\npour option dans toutes les options:\n    impression &quot;La valeur est: &quot; + option.get_attribute(&quot;valeur&quot;)\n    option.Cliquez sur()</p>"},{"id":"text-188","type":"text","heading":"","plain_text":"$ select = conducteur $-&gt;find_element(&#39;sélectionner&#39;, &#39;tag_name&#39;)\n@toutes les options = conducteur $-&gt;find_child_element($ select, &quot;option&quot;, &#39;tag_name&#39;)\npour chaque option $ (@toutes les options) \n    impression &quot;La valeur est: &quot;.option $-&gt;get_attribute(&quot;valeur&quot;).&quot; n&quot;;\n    option $-&gt;Cliquez sur();","html":"<p>$ select = conducteur $-&gt;find_element(&#039;sélectionner&#039;, &#039;tag_name&#039;)\n@toutes les options = conducteur $-&gt;find_child_element($ select, &quot;option&quot;, &#039;tag_name&#039;)\npour chaque option $ (@toutes les options) \n    impression &quot;La valeur est: &quot;.option $-&gt;get_attribute(&quot;valeur&quot;).&quot; n&quot;;\n    option $-&gt;Cliquez sur();</p>"},{"id":"text-189","type":"text","heading":"","plain_text":"Ceci trouvera le premier élément “SELECT” sur la page et parcourra chaque\nà tour de rôle, en affichant leurs valeurs et en les sélectionnant à tour de rôle.\nComme vous le constaterez, ce n’est pas le moyen le plus efficace de traiter avec SELECT\néléments. Les classes de support de WebDriver comprennent une classe appelée «Select», qui\nfournit des méthodes utiles pour interagir avec ceux-ci.","html":"<p>Ceci trouvera le premier élément “SELECT” sur la page et parcourra chaque\nà tour de rôle, en affichant leurs valeurs et en les sélectionnant à tour de rôle.\nComme vous le constaterez, ce n’est pas le moyen le plus efficace de traiter avec SELECT\néléments. Les classes de support de WebDriver comprennent une classe appelée «Select», qui\nfournit des méthodes utiles pour interagir avec ceux-ci.</p>"},{"id":"text-190","type":"text","heading":"","plain_text":"Sélectionner sélectionner = Nouveau Sélectionner(chauffeur.findElement(Par.tagName(&quot;sélectionner&quot;)));\nsélectionner.tout déselectionner();\nsélectionner.selectByVisibleText(&quot;Edam&quot;)","html":"<p>Sélectionner sélectionner = Nouveau Sélectionner(chauffeur.findElement(Par.tagName(&quot;sélectionner&quot;)));\nsélectionner.tout déselectionner();\nsélectionner.selectByVisibleText(&quot;Edam&quot;)</p>"},{"id":"text-191","type":"text","heading":"","plain_text":"SelectElement sélectionner = Nouveau SelectElement(chauffeur.FindElement(Par.TagName(&quot;sélectionner&quot;)));\nsélectionner.Tout déselectionner();\nsélectionner.SelectByText(&quot;Edam&quot;)","html":"<p>SelectElement sélectionner = Nouveau SelectElement(chauffeur.FindElement(Par.TagName(&quot;sélectionner&quot;)));\nsélectionner.Tout déselectionner();\nsélectionner.SelectByText(&quot;Edam&quot;)</p>"},{"id":"text-192","type":"text","heading":"","plain_text":"# disponible depuis 2.14\n    sélectionner = Sélénium::WebDriver::Soutien::Sélectionner.Nouveau(chauffeur.find_element(: tag_name, &quot;sélectionner&quot;))\n    sélectionner.tout déselectionner()\n    sélectionner.select_by(:texte, &quot;Edam&quot;)","html":"<p># disponible depuis 2.14\n    sélectionner = Sélénium::WebDriver::Soutien::Sélectionner.Nouveau(chauffeur.find_element(: tag_name, &quot;sélectionner&quot;))\n    sélectionner.tout déselectionner()\n    sélectionner.select_by(:texte, &quot;Edam&quot;)</p>"},{"id":"text-193","type":"text","heading":"","plain_text":"# disponible depuis 2.12\nde selenium.webdriver.support.ui importation Sélectionner\nsélectionner = Sélectionner(chauffeur.find_element_by_tag_name(&quot;sélectionner&quot;))\nsélectionner.tout déselectionner()\nsélectionner.select_by_visible_text(&quot;Edam&quot;)","html":"<p># disponible depuis 2.12\nde selenium.webdriver.support.ui importation Sélectionner\nsélectionner = Sélectionner(chauffeur.find_element_by_tag_name(&quot;sélectionner&quot;))\nsélectionner.tout déselectionner()\nsélectionner.select_by_visible_text(&quot;Edam&quot;)</p>"},{"id":"text-194","type":"text","heading":"","plain_text":"Ceci désélectionnera toutes les OPTIONS du premier SELECT sur la page, puis\nsélectionnez l&#39;OPTION avec le texte affiché «Edam».\nUne fois le formulaire rempli, vous souhaiterez probablement le soumettre. Un\nPour ce faire, recherchez le bouton «Soumettre» et cliquez dessus:","html":"<p>Ceci désélectionnera toutes les OPTIONS du premier SELECT sur la page, puis\nsélectionnez l&#039;OPTION avec le texte affiché «Edam».\nUne fois le formulaire rempli, vous souhaiterez probablement le soumettre. Un\nPour ce faire, recherchez le bouton «Soumettre» et cliquez dessus:</p>"},{"id":"text-195","type":"text","heading":"","plain_text":"chauffeur.findElement(Par.identifiant(&quot;soumettre&quot;)).Cliquez sur();","html":"<p>chauffeur.findElement(Par.identifiant(&quot;soumettre&quot;)).Cliquez sur();</p>"},{"id":"text-196","type":"text","heading":"","plain_text":"chauffeur.FindElement(Par.Id(&quot;soumettre&quot;)).Cliquez sur();","html":"<p>chauffeur.FindElement(Par.Id(&quot;soumettre&quot;)).Cliquez sur();</p>"},{"id":"text-197","type":"text","heading":"","plain_text":"chauffeur.find_element(: id, &quot;soumettre&quot;).Cliquez sur","html":"<p>chauffeur.find_element(: id, &quot;soumettre&quot;).Cliquez sur</p>"},{"id":"text-198","type":"text","heading":"","plain_text":"chauffeur.find_element_by_id(&quot;soumettre&quot;).Cliquez sur()","html":"<p>chauffeur.find_element_by_id(&quot;soumettre&quot;).Cliquez sur()</p>"},{"id":"text-199","type":"text","heading":"","plain_text":"conducteur $-&gt;find_element(&#39;soumettre&#39;,&#39;id&#39;)-&gt;Cliquez sur()","html":"<p>conducteur $-&gt;find_element(&#039;soumettre&#039;,&#039;id&#039;)-&gt;Cliquez sur()</p>"},{"id":"text-200","type":"text","heading":"","plain_text":"chauffeur.findElement(Par.identifiant(&#39;soumettre&#39;).Cliquez sur();","html":"<p>chauffeur.findElement(Par.identifiant(&#039;soumettre&#039;).Cliquez sur();</p>"},{"id":"text-201","type":"text","heading":"","plain_text":"WebDriver a aussi la méthode de commodité «submit» sur chaque élément.\nSi vous appelez cela sur un élément du formulaire, WebDriver remontera le DOM.\njusqu&#39;à ce qu&#39;il trouve le formulaire ci-joint et appelle ensuite soumettre à ce sujet. Si la\nl’élément n’est pas dans un formulaire, alors le NoSuchElementException    sera jeté:","html":"<p>WebDriver a aussi la méthode de commodité «submit» sur chaque élément.\nSi vous appelez cela sur un élément du formulaire, WebDriver remontera le DOM.\njusqu&#039;à ce qu&#039;il trouve le formulaire ci-joint et appelle ensuite soumettre à ce sujet. Si la\nl’élément n’est pas dans un formulaire, alors le NoSuchElementException    sera jeté:</p>"},{"id":"text-202","type":"text","heading":"","plain_text":"Se déplacer entre Windows et les cadres\nCertaines applications Web ont plusieurs cadres ou plusieurs fenêtres. WebDriver prend en charge\nvous déplacer entre les fenêtres nommées en utilisant la méthode «switchTo»:","html":"<p>Se déplacer entre Windows et les cadres\nCertaines applications Web ont plusieurs cadres ou plusieurs fenêtres. WebDriver prend en charge\nvous déplacer entre les fenêtres nommées en utilisant la méthode «switchTo»:</p>"},{"id":"text-203","type":"text","heading":"","plain_text":"chauffeur.basculer vers()la fenêtre(&quot;windowName&quot;)","html":"<p>chauffeur.basculer vers()la fenêtre(&quot;windowName&quot;)</p>"},{"id":"text-204","type":"text","heading":"","plain_text":"chauffeur.Basculer vers()La fenêtre(&quot;windowName&quot;)","html":"<p>chauffeur.Basculer vers()La fenêtre(&quot;windowName&quot;)</p>"},{"id":"text-205","type":"text","heading":"","plain_text":"chauffeur.basculer vers.la fenêtre(&quot;windowName&quot;)","html":"<p>chauffeur.basculer vers.la fenêtre(&quot;windowName&quot;)</p>"},{"id":"text-206","type":"text","heading":"","plain_text":"chauffeur.basculer vers.la fenêtre(&quot;windowName&quot;)","html":"<p>chauffeur.basculer vers.la fenêtre(&quot;windowName&quot;)</p>"},{"id":"text-207","type":"text","heading":"","plain_text":"conducteur $-&gt;switch_to_window(&quot;windowName&quot;)","html":"<p>conducteur $-&gt;switch_to_window(&quot;windowName&quot;)</p>"},{"id":"text-208","type":"text","heading":"","plain_text":"chauffeur.basculer vers()la fenêtre(&#39;windowName&#39;)","html":"<p>chauffeur.basculer vers()la fenêtre(&#039;windowName&#039;)</p>"},{"id":"text-209","type":"text","heading":"","plain_text":"Tous les appels à chauffeur    sera maintenant interprété comme étant dirigé vers le\nfenêtre particulière. Mais comment connaissez-vous le nom de la fenêtre? Regardez le\njavascript ou lien qui l&#39;a ouvert:","html":"<p>Tous les appels à chauffeur    sera maintenant interprété comme étant dirigé vers le\nfenêtre particulière. Mais comment connaissez-vous le nom de la fenêtre? Regardez le\njavascript ou lien qui l&#039;a ouvert:</p>"},{"id":"text-210","type":"text","heading":"","plain_text":"&lt;une href=&quot;quelque part.html&quot; cible=&quot;windowName&quot;&gt;Cliquez ici pour ouvrir une nouvelle fenêtre&lt;/une&gt;","html":"<p>&lt;une href=&quot;quelque part.html&quot; cible=&quot;windowName&quot;&gt;Cliquez ici pour ouvrir une nouvelle fenêtre&lt;/une&gt;</p>"},{"id":"text-211","type":"text","heading":"","plain_text":"Alternativement, vous pouvez passer un &quot;handle de fenêtre&quot; à &quot;switchTo (). Window ()&quot;\nméthode. Sachant cela, il est possible de parcourir toutes les fenêtres ouvertes comme ceci:","html":"<p>Alternativement, vous pouvez passer un &quot;handle de fenêtre&quot; à &quot;switchTo (). Window ()&quot;\nméthode. Sachant cela, il est possible de parcourir toutes les fenêtres ouvertes comme ceci:</p>"},{"id":"text-212","type":"text","heading":"","plain_text":"pour (Chaîne manipuler : chauffeur.getWindowHandles()) \n    chauffeur.basculer vers()la fenêtre(manipuler)","html":"<p>pour (Chaîne manipuler : chauffeur.getWindowHandles()) \n    chauffeur.basculer vers()la fenêtre(manipuler)</p>"},{"id":"text-213","type":"text","heading":"","plain_text":"pour chaque (chaîne manipuler dans chauffeur.Poignées de fenêtre) \n    chauffeur.Basculer vers()La fenêtre(manipuler)","html":"<p>pour chaque (chaîne manipuler dans chauffeur.Poignées de fenêtre) \n    chauffeur.Basculer vers()La fenêtre(manipuler)</p>"},{"id":"text-214","type":"text","heading":"","plain_text":"chauffeur.window_handles.chaque faire |manipuler|\n    chauffeur.switch_to.la fenêtre manipuler\nfin","html":"<p>chauffeur.window_handles.chaque faire |manipuler|\n    chauffeur.switch_to.la fenêtre manipuler\nfin</p>"},{"id":"text-215","type":"text","heading":"","plain_text":"pour manipuler dans chauffeur.window_handles:\n    chauffeur.switch_to.la fenêtre(manipuler)","html":"<p>pour manipuler dans chauffeur.window_handles:\n    chauffeur.switch_to.la fenêtre(manipuler)</p>"},{"id":"text-216","type":"text","heading":"","plain_text":"$windows = $driver-&gt;get_window_handles()\nforeach $window (@$windows) \n    $driver-&gt;switch_to_window($window)","html":"<p>$windows = $driver-&gt;get_window_handles()\nforeach $window (@$windows) \n    $driver-&gt;switch_to_window($window)</p>"},{"id":"text-217","type":"text","heading":"","plain_text":"You can also switch from frame to frame (or into iframes):","html":"<p>You can also switch from frame to frame (or into iframes):</p>"},{"id":"text-218","type":"text","heading":"","plain_text":"chauffeur.switchTo().Cadre(&quot;frameName&quot;)","html":"<p>chauffeur.switchTo().Cadre(&quot;frameName&quot;)</p>"},{"id":"text-219","type":"text","heading":"","plain_text":"chauffeur.SwitchTo().Cadre(&quot;frameName&quot;)","html":"<p>chauffeur.SwitchTo().Cadre(&quot;frameName&quot;)</p>"},{"id":"text-220","type":"text","heading":"","plain_text":"chauffeur.switch_to.Cadre &quot;frameName&quot;","html":"<p>chauffeur.switch_to.Cadre &quot;frameName&quot;</p>"},{"id":"text-221","type":"text","heading":"","plain_text":"chauffeur.switch_to.Cadre(&quot;frameName&quot;)","html":"<p>chauffeur.switch_to.Cadre(&quot;frameName&quot;)</p>"},{"id":"text-222","type":"text","heading":"","plain_text":"$driver-&gt;switch_to_frame(&#39;frameName&#39;)","html":"<p>$driver-&gt;switch_to_frame(&#039;frameName&#039;)</p>"},{"id":"text-223","type":"text","heading":"","plain_text":"chauffeur.switchTo().Cadre(&#39;frameName&#39;)","html":"<p>chauffeur.switchTo().Cadre(&#039;frameName&#039;)</p>"},{"id":"text-224","type":"text","heading":"","plain_text":"Navigation: History and Location\nEarlier, we covered navigating to a page using the “get” command (\ndriver.get(&quot;http://www.example.com&quot;)    ou driver.Url=&quot;http://www.example.com&quot;    in C#).\nAs you’ve seen, WebDriver has a number of smaller, task-focused interfaces, and navigation is a useful task.\nBecause loading a page is such a fundamental requirement, the method to do this\nlives on the main WebDriver interface, but it’s simply a synonym to:","html":"<p>Navigation: History and Location\nEarlier, we covered navigating to a page using the “get” command (\ndriver.get(&quot;http://www.example.com&quot;)    ou driver.Url=&quot;http://www.example.com&quot;    in C#).\nAs you’ve seen, WebDriver has a number of smaller, task-focused interfaces, and navigation is a useful task.\nBecause loading a page is such a fundamental requirement, the method to do this\nlives on the main WebDriver interface, but it’s simply a synonym to:</p>"},{"id":"text-225","type":"text","heading":"","plain_text":"chauffeur.naviguer().à(&quot;http://www.example.com&quot;)","html":"<p>chauffeur.naviguer().à(&quot;http://www.example.com&quot;)</p>"},{"id":"text-226","type":"text","heading":"","plain_text":"chauffeur.Navigate().GoToUrl(&quot;http://www.example.com&quot;)","html":"<p>chauffeur.Navigate().GoToUrl(&quot;http://www.example.com&quot;)</p>"},{"id":"text-227","type":"text","heading":"","plain_text":"chauffeur.naviguer.à &quot;http://www.example.com&quot;","html":"<p>chauffeur.naviguer.à &quot;http://www.example.com&quot;</p>"},{"id":"text-228","type":"text","heading":"","plain_text":"chauffeur.obtenir(&quot;http://www.example.com&quot;)  # python doesn&#39;t have driver.navigate","html":"<p>chauffeur.obtenir(&quot;http://www.example.com&quot;)  # python doesn&#039;t have driver.navigate</p>"},{"id":"text-229","type":"text","heading":"","plain_text":"$driver-&gt;naviguer(&#39;http://www.example.com&#39;)","html":"<p>$driver-&gt;naviguer(&#039;http://www.example.com&#039;)</p>"},{"id":"text-230","type":"text","heading":"","plain_text":"chauffeur.naviguer().à(&#39;http://www.example.com&#39;)","html":"<p>chauffeur.naviguer().à(&#039;http://www.example.com&#039;)</p>"},{"id":"text-231","type":"text","heading":"","plain_text":"To reiterate: “navigate().to()&quot; et &quot;get()” do exactly the same thing.\nOne’s just a lot easier to type than the other!\nThe “navigate” interface also exposes the ability to move backwards and forwards in your browser’s history:","html":"<p>To reiterate: “navigate().to()&quot; et &quot;get()” do exactly the same thing.\nOne’s just a lot easier to type than the other!\nThe “navigate” interface also exposes the ability to move backwards and forwards in your browser’s history:</p>"},{"id":"text-232","type":"text","heading":"","plain_text":"chauffeur.naviguer().vers l&#39;avant();\nchauffeur.naviguer().retour();","html":"<p>chauffeur.naviguer().vers l&#039;avant();\nchauffeur.naviguer().retour();</p>"},{"id":"text-233","type":"text","heading":"","plain_text":"chauffeur.Navigate().Vers l&#39;avant();\nchauffeur.Navigate().Retour();","html":"<p>chauffeur.Navigate().Vers l&#039;avant();\nchauffeur.Navigate().Retour();</p>"},{"id":"text-234","type":"text","heading":"","plain_text":"chauffeur.naviguer.vers l&#39;avant\nchauffeur.naviguer.retour","html":"<p>chauffeur.naviguer.vers l&#039;avant\nchauffeur.naviguer.retour</p>"},{"id":"text-235","type":"text","heading":"","plain_text":"chauffeur.vers l&#39;avant()\nchauffeur.retour()","html":"<p>chauffeur.vers l&#039;avant()\nchauffeur.retour()</p>"},{"id":"text-236","type":"text","heading":"","plain_text":"chauffeur.naviguer().vers l&#39;avant();\nchauffeur.naviguer().retour();","html":"<p>chauffeur.naviguer().vers l&#039;avant();\nchauffeur.naviguer().retour();</p>"},{"id":"text-237","type":"text","heading":"","plain_text":"Please be aware that this functionality depends entirely on the underlying\nnavigateur. It’s just possible that something unexpected may happen when you call\nthese methods if you’re used to the behaviour of one browser over another.","html":"<p>Please be aware that this functionality depends entirely on the underlying\nnavigateur. It’s just possible that something unexpected may happen when you call\nthese methods if you’re used to the behaviour of one browser over another.</p>"},{"id":"text-238","type":"text","heading":"","plain_text":"Cookies\nBefore we leave these next steps, you may be interested in understanding how to\nuse cookies. First of all, you need to be on the domain that the cookie will be\nvalid for. If you are trying to preset cookies before\nyou start interacting with a site and your homepage is large / takes a while to load\nan alternative is to find a smaller page on the site (typically the 404 page is small,\npar exemple. http://example.com/some404page).","html":"<p>Cookies\nBefore we leave these next steps, you may be interested in understanding how to\nuse cookies. First of all, you need to be on the domain that the cookie will be\nvalid for. If you are trying to preset cookies before\nyou start interacting with a site and your homepage is large / takes a while to load\nan alternative is to find a smaller page on the site (typically the 404 page is small,\npar exemple. http://example.com/some404page).</p>"},{"id":"text-239","type":"text","heading":"","plain_text":"// Go to the correct domain\nchauffeur.obtenir(&quot;http://www.example.com&quot;)","html":"<p>// Go to the correct domain\nchauffeur.obtenir(&quot;http://www.example.com&quot;)</p>"},{"id":"text-240","type":"text","heading":"","plain_text":"// Now set the cookie. This one&#39;s valid for the entire domain\nBiscuit biscuit = Nouveau Biscuit(&quot;key&quot;, &quot;value&quot;)\nchauffeur.gérer().addCookie(biscuit)","html":"<p>// Now set the cookie. This one&#039;s valid for the entire domain\nBiscuit biscuit = Nouveau Biscuit(&quot;key&quot;, &quot;value&quot;)\nchauffeur.gérer().addCookie(biscuit)</p>"},{"id":"text-241","type":"text","heading":"","plain_text":"// And now output all the available cookies for the current URL\nEnsemble&lt;Biscuit&gt; allCookies = chauffeur.gérer().getCookies();\npour (Biscuit loadedCookie : allCookies) \n    Système.en dehors.imprimer(Chaîne.format(&quot;%s -&gt; %s&quot;, loadedCookie.getName(), loadedCookie.getValue()));","html":"<p>// And now output all the available cookies for the current URL\nEnsemble&lt;Biscuit&gt; allCookies = chauffeur.gérer().getCookies();\npour (Biscuit loadedCookie : allCookies) \n    Système.en dehors.imprimer(Chaîne.format(&quot;%s -&gt; %s&quot;, loadedCookie.getName(), loadedCookie.getValue()));</p>"},{"id":"text-242","type":"text","heading":"","plain_text":"// You can delete cookies in 3 ways\n// By name\nchauffeur.gérer().deleteCookieNamed(&quot;CookieName&quot;)\n// By Cookie\nchauffeur.gérer().deleteCookie(loadedCookie)\n// Or all of them\nchauffeur.gérer().deleteAllCookies();","html":"<p>// You can delete cookies in 3 ways\n// By name\nchauffeur.gérer().deleteCookieNamed(&quot;CookieName&quot;)\n// By Cookie\nchauffeur.gérer().deleteCookie(loadedCookie)\n// Or all of them\nchauffeur.gérer().deleteAllCookies();</p>"},{"id":"text-243","type":"text","heading":"","plain_text":"# Go to the correct domain\nchauffeur.obtenir(&quot;http://www.example.com&quot;)","html":"<p># Go to the correct domain\nchauffeur.obtenir(&quot;http://www.example.com&quot;)</p>"},{"id":"text-244","type":"text","heading":"","plain_text":"# Now set the cookie. Here&#39;s one for the entire domain\n# the cookie name here is &#39;key&#39; and its value is &#39;value&#39;\nchauffeur.add_cookie(&#39;name&#39;:&#39;key&#39;, &#39;value&#39;:&#39;value&#39;, &#39;path&#39;:&#39;/&#39;)\n# additional keys that can be passed in are:\n# &#39;domain&#39; -&gt; String,\n# &#39;secure&#39; -&gt; Boolean,\n# &#39;expiry&#39; -&gt; Milliseconds since the Epoch it should expire.","html":"<p># Now set the cookie. Here&#039;s one for the entire domain\n# the cookie name here is &#039;key&#039; and its value is &#039;value&#039;\nchauffeur.add_cookie(&#039;name&#039;:&#039;key&#039;, &#039;value&#039;:&#039;value&#039;, &#039;path&#039;:&#039;/&#039;)\n# additional keys that can be passed in are:\n# &#039;domain&#039; -&gt; String,\n# &#039;secure&#039; -&gt; Boolean,\n# &#039;expiry&#039; -&gt; Milliseconds since the Epoch it should expire.</p>"},{"id":"text-245","type":"text","heading":"","plain_text":"# And now output all the available cookies for the current URL\npour biscuit dans chauffeur.get_cookies():\n    impression &quot;% s    -&gt; % s&quot; % (biscuit[[[[&#39;name&#39;], biscuit[[[[&#39;value&#39;])","html":"<p># And now output all the available cookies for the current URL\npour biscuit dans chauffeur.get_cookies():\n    impression &quot;% s    -&gt; % s&quot; % (biscuit[[[[&#039;name&#039;], biscuit[[[[&#039;value&#039;])</p>"},{"id":"text-246","type":"text","heading":"","plain_text":"# You can delete cookies in 2 ways\n# By name\nchauffeur.delete_cookie(&quot;CookieName&quot;)\n# Or all of them\nchauffeur.delete_all_cookies()","html":"<p># You can delete cookies in 2 ways\n# By name\nchauffeur.delete_cookie(&quot;CookieName&quot;)\n# Or all of them\nchauffeur.delete_all_cookies()</p>"},{"id":"text-247","type":"text","heading":"","plain_text":"# Go to the correct domain\nchauffeur.obtenir &quot;http://www.example.com&quot;","html":"<p># Go to the correct domain\nchauffeur.obtenir &quot;http://www.example.com&quot;</p>"},{"id":"text-248","type":"text","heading":"","plain_text":"# Now set the cookie. Here&#39;s one for the entire domain\n# the cookie name here is &#39;key&#39; and its value is &#39;value&#39;\nchauffeur.gérer.add_cookie(:name =&gt; &#39;key&#39;, :value =&gt; &#39;value&#39;)\n# additional keys that can be passed in are:\n# :path =&gt; String, :secure -&gt; Boolean, :expires -&gt; Time, DateTime, or seconds since epoch","html":"<p># Now set the cookie. Here&#039;s one for the entire domain\n# the cookie name here is &#039;key&#039; and its value is &#039;value&#039;\nchauffeur.gérer.add_cookie(:name =&gt; &#039;key&#039;, :value =&gt; &#039;value&#039;)\n# additional keys that can be passed in are:\n# :path =&gt; String, :secure -&gt; Boolean, :expires -&gt; Time, DateTime, or seconds since epoch</p>"},{"id":"text-249","type":"text","heading":"","plain_text":"# And now output all the available cookies for the current URL\nchauffeur.gérer.all_cookies.chaque \n    met &quot;#biscuit[[[[:name]    =&gt; #biscuit[[[[:value]&quot;","html":"<p># And now output all the available cookies for the current URL\nchauffeur.gérer.all_cookies.chaque \n    met &quot;#biscuit[[[[:name]    =&gt; #biscuit[[[[:value]&quot;</p>"},{"id":"text-250","type":"text","heading":"","plain_text":"# You can delete cookies in 2 ways\n# By name\nchauffeur.gérer.delete_cookie &quot;CookieName&quot;\n# Or all of them\nchauffeur.gérer.delete_all_cookies","html":"<p># You can delete cookies in 2 ways\n# By name\nchauffeur.gérer.delete_cookie &quot;CookieName&quot;\n# Or all of them\nchauffeur.gérer.delete_all_cookies</p>"},{"id":"text-251","type":"text","heading":"","plain_text":"# Go to the correct domain\n$driver-&gt;obtenir(&quot;http://www.example.com&quot;)","html":"<p># Go to the correct domain\n$driver-&gt;obtenir(&quot;http://www.example.com&quot;)</p>"},{"id":"text-252","type":"text","heading":"","plain_text":"# Now set the cookie. Here&#39;s one for the entire domain\n# the cookie name here is &#39;key&#39; and its value is &#39;value&#39;\n$driver-&gt;add_cookie(&#39;key&#39;, &#39;value&#39;, &#39;/&#39;, &#39;example.com&#39;, 0)\n# additional required inputs are path and domain\n# the final input secure is an optional boolean","html":"<p># Now set the cookie. Here&#039;s one for the entire domain\n# the cookie name here is &#039;key&#039; and its value is &#039;value&#039;\n$driver-&gt;add_cookie(&#039;key&#039;, &#039;value&#039;, &#039;/&#039;, &#039;example.com&#039;, 0)\n# additional required inputs are path and domain\n# the final input secure is an optional boolean</p>"},{"id":"text-253","type":"text","heading":"","plain_text":"# And now output all the available cookies for the current URL\nmon $cookies_ref = $driver-&gt;get_all_cookies(); # Returns reference to AoH\npour $cookie_ref (@$cookies_ref) \n    printf &quot;%s =&gt; %sn&quot;, $cookie_ref-&gt;prénom, $cookie_ref-&gt;valeur;","html":"<p># And now output all the available cookies for the current URL\nmon $cookies_ref = $driver-&gt;get_all_cookies(); # Returns reference to AoH\npour $cookie_ref (@$cookies_ref) \n    printf &quot;%s =&gt; %sn&quot;, $cookie_ref-&gt;prénom, $cookie_ref-&gt;valeur;</p>"},{"id":"text-254","type":"text","heading":"","plain_text":"# You can delete cookies in 2 ways\n# By name\n$driver-&gt;delete_cookie_named(&quot;key&quot;)\n# Or all of them\n$driver-&gt;delete_all_cookies();","html":"<p># You can delete cookies in 2 ways\n# By name\n$driver-&gt;delete_cookie_named(&quot;key&quot;)\n# Or all of them\n$driver-&gt;delete_all_cookies();</p>"},{"id":"text-255","type":"text","heading":"","plain_text":"# Go to the correct domain\ndriver.get(&#39;http://www.example.com&#39;);","html":"<p># Go to the correct domain\ndriver.get(&#039;http://www.example.com&#039;);</p>"},{"id":"text-256","type":"text","heading":"","plain_text":"# Now set the basic cookie. Here&#39;s one for the entire domain\n# the cookie name here is &#39;key&#39; and its value is &#39;value&#39;\ndriver.manage().addCookie(name: &#39;cookie-1&#39;, value: &#39;cookieValue&#39;);","html":"<p># Now set the basic cookie. Here&#039;s one for the entire domain\n# the cookie name here is &#039;key&#039; and its value is &#039;value&#039;\ndriver.manage().addCookie(name: &#039;cookie-1&#039;, value: &#039;cookieValue&#039;);</p>"},{"id":"text-257","type":"text","heading":"","plain_text":"# And now output all the available cookies for the current URL\ndriver.manage().getCookies().then( (loadedCookies) =&gt;\n    for (let cookie in loadedCookies) \n    console.log(&#39;printing Cookies loaded : &#39;+cookie);\n    \n    );\n# You can delete cookies in 2 ways\n# By name\ndriver.manage().deleteCookie(&#39;cookie-1&#39;);\n# Or all of them\ndriver.manage().deleteAllCookies();","html":"<p># And now output all the available cookies for the current URL\ndriver.manage().getCookies().then( (loadedCookies) =&gt;\n    for (let cookie in loadedCookies) \n    console.log(&#039;printing Cookies loaded : &#039;+cookie);\n    \n    );\n# You can delete cookies in 2 ways\n# By name\ndriver.manage().deleteCookie(&#039;cookie-1&#039;);\n# Or all of them\ndriver.manage().deleteAllCookies();</p>"},{"id":"text-258","type":"text","heading":"","plain_text":"Changing the User Agent\nThis is easy with the Firefox Driver:","html":"<p>Changing the User Agent\nThis is easy with the Firefox Driver:</p>"},{"id":"text-259","type":"text","heading":"","plain_text":"FirefoxProfile profil = Nouveau FirefoxProfile();\nprofil.addAdditionalPreference(&quot;general.useragent.override&quot;, &quot;some UA string&quot;)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)","html":"<p>FirefoxProfile profil = Nouveau FirefoxProfile();\nprofil.addAdditionalPreference(&quot;general.useragent.override&quot;, &quot;some UA string&quot;)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)</p>"},{"id":"text-260","type":"text","heading":"","plain_text":"var profil = Nouveau FirefoxProfile();\nprofil.SetPreference(&quot;general.useragent.override&quot;, &quot;some UA string&quot;)\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)","html":"<p>var profil = Nouveau FirefoxProfile();\nprofil.SetPreference(&quot;general.useragent.override&quot;, &quot;some UA string&quot;)\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)</p>"},{"id":"text-261","type":"text","heading":"","plain_text":"profil = Sélénium::WebDriver::Firefox::Profil.Nouveau\nprofil[[[[&#39;general.useragent.override&#39;] = &quot;some UA string&quot;\nchauffeur = Sélénium::WebDriver.pour :firefox, :profile =&gt; profil","html":"<p>profil = Sélénium::WebDriver::Firefox::Profil.Nouveau\nprofil[[[[&#039;general.useragent.override&#039;] = &quot;some UA string&quot;\nchauffeur = Sélénium::WebDriver.pour :firefox, :profile =&gt; profil</p>"},{"id":"text-262","type":"text","heading":"","plain_text":"profil = webdriver.FirefoxProfile()\nprofil.set_preference(&quot;general.useragent.override&quot;, &quot;some UA string&quot;)\nchauffeur = webdriver.Firefox(profil)","html":"<p>profil = webdriver.FirefoxProfile()\nprofil.set_preference(&quot;general.useragent.override&quot;, &quot;some UA string&quot;)\nchauffeur = webdriver.Firefox(profil)</p>"},{"id":"text-263","type":"text","heading":"","plain_text":"utilisation Selenium::Remote::Driver::Firefox::Profile;\nmon $profile = Selenium::Remote::Driver::Firefox::Profile-&gt;Nouveau;\n$profile-&gt;set_preference(&#39;general.useragent.overide&#39; =&gt; &quot;some UA string&quot;)\nmon $driver = Selenium::Remote::Driver-&gt;Nouveau(&#39;firefox_profile&#39; =&gt; $profile)","html":"<p>utilisation Selenium::Remote::Driver::Firefox::Profile;\nmon $profile = Selenium::Remote::Driver::Firefox::Profile-&gt;Nouveau;\n$profile-&gt;set_preference(&#039;general.useragent.overide&#039; =&gt; &quot;some UA string&quot;)\nmon $driver = Selenium::Remote::Driver-&gt;Nouveau(&#039;firefox_profile&#039; =&gt; $profile)</p>"},{"id":"text-264","type":"text","heading":"","plain_text":"Drag And Drop\nHere’s an example of using the Actions class to perform a drag and drop.\nNative events are required to be enabled.","html":"<p>Drag And Drop\nHere’s an example of using the Actions class to perform a drag and drop.\nNative events are required to be enabled.</p>"},{"id":"text-265","type":"text","heading":"","plain_text":"WebElement élément = chauffeur.findElement(Par.prénom(&quot;source&quot;));\nWebElement cible = chauffeur.findElement(Par.prénom(&quot;target&quot;));","html":"<p>WebElement élément = chauffeur.findElement(Par.prénom(&quot;source&quot;));\nWebElement cible = chauffeur.findElement(Par.prénom(&quot;target&quot;));</p>"},{"id":"text-266","type":"text","heading":"","plain_text":"(Nouveau actes(chauffeur)).dragAndDrop(élément, cible).effectuer();","html":"<p>(Nouveau actes(chauffeur)).dragAndDrop(élément, cible).effectuer();</p>"},{"id":"text-267","type":"text","heading":"","plain_text":"IWebElement élément = chauffeur.FindElement(Par.prénom(&quot;source&quot;));\nIWebElement cible = chauffeur.FindElement(Par.prénom(&quot;target&quot;));\n(Nouveau actes(chauffeur)).DragAndDrop(élément, cible).Effectuer();","html":"<p>IWebElement élément = chauffeur.FindElement(Par.prénom(&quot;source&quot;));\nIWebElement cible = chauffeur.FindElement(Par.prénom(&quot;target&quot;));\n(Nouveau actes(chauffeur)).DragAndDrop(élément, cible).Effectuer();</p>"},{"id":"text-268","type":"text","heading":"","plain_text":"élément = chauffeur.find_element(:name =&gt; &#39;source&#39;)\ncible = chauffeur.find_element(:name =&gt; &#39;target&#39;)","html":"<p>élément = chauffeur.find_element(:name =&gt; &#039;source&#039;)\ncible = chauffeur.find_element(:name =&gt; &#039;target&#039;)</p>"},{"id":"text-269","type":"text","heading":"","plain_text":"chauffeur.action.drag_and_drop(élément, cible).effectuer","html":"<p>chauffeur.action.drag_and_drop(élément, cible).effectuer</p>"},{"id":"text-270","type":"text","heading":"","plain_text":"de selenium.webdriver.common.action_chains importation ActionChains\nélément = chauffeur.find_element_by_name(&quot;source&quot;)\ncible =  chauffeur.find_element_by_name(&quot;target&quot;)","html":"<p>de selenium.webdriver.common.action_chains importation ActionChains\nélément = chauffeur.find_element_by_name(&quot;source&quot;)\ncible =  chauffeur.find_element_by_name(&quot;target&quot;)</p>"},{"id":"text-271","type":"text","heading":"","plain_text":"ActionChains(chauffeur).drag_and_drop(élément, cible).effectuer()","html":"<p>ActionChains(chauffeur).drag_and_drop(élément, cible).effectuer()</p>"},{"id":"text-272","type":"text","heading":"","plain_text":"Driver Specifics and Tradeoffs","html":"<p>Driver Specifics and Tradeoffs</p>"},{"id":"text-273","type":"text","heading":"","plain_text":"Selenium-WebDriver’s Drivers\nWebDriver is the name of the key interface against which tests should be\nwritten, but there are several implementations. Ceux-ci inclus:","html":"<p>Selenium-WebDriver’s Drivers\nWebDriver is the name of the key interface against which tests should be\nwritten, but there are several implementations. Ceux-ci inclus:</p>"},{"id":"text-274","type":"text","heading":"","plain_text":"HtmlUnit Driver\nThis is currently the fastest and most lightweight implementation of WebDriver.\nAs the name suggests, this is based on HtmlUnit. HtmlUnit is a java based implementation\nof a WebBrowser without a GUI. For any language binding (other than java) the\nSelenium Server is required to use this driver.","html":"<p>HtmlUnit Driver\nThis is currently the fastest and most lightweight implementation of WebDriver.\nAs the name suggests, this is based on HtmlUnit. HtmlUnit is a java based implementation\nof a WebBrowser without a GUI. For any language binding (other than java) the\nSelenium Server is required to use this driver.</p>"},{"id":"text-275","type":"text","heading":"","plain_text":"Usage","html":"<p>Usage</p>"},{"id":"text-276","type":"text","heading":"","plain_text":"WebDriver chauffeur = Nouveau HtmlUnitDriver();","html":"<p>WebDriver chauffeur = Nouveau HtmlUnitDriver();</p>"},{"id":"text-277","type":"text","heading":"","plain_text":"IWebDriver chauffeur = Nouveau RemoteWebDriver(Nouveau Uri(&quot;http://127.0.0.1:4444/wd/hub&quot;),\n                                        DesiredCapabilities.HtmlUnit());","html":"<p>IWebDriver chauffeur = Nouveau RemoteWebDriver(Nouveau Uri(&quot;http://127.0.0.1:4444/wd/hub&quot;),\n                                        DesiredCapabilities.HtmlUnit());</p>"},{"id":"text-278","type":"text","heading":"","plain_text":"chauffeur = webdriver.Remote(&quot;http://localhost:4444/wd/hub&quot;, webdriver.DesiredCapabilities.HTMLUNIT.copie())","html":"<p>chauffeur = webdriver.Remote(&quot;http://localhost:4444/wd/hub&quot;, webdriver.DesiredCapabilities.HTMLUNIT.copie())</p>"},{"id":"text-279","type":"text","heading":"","plain_text":"chauffeur = Sélénium::WebDriver.pour :remote, :url =&gt; &quot;http://localhost:4444/wd/hub&quot;, :desired_capabilities =&gt; :htmlunit","html":"<p>chauffeur = Sélénium::WebDriver.pour :remote, :url =&gt; &quot;http://localhost:4444/wd/hub&quot;, :desired_capabilities =&gt; :htmlunit</p>"},{"id":"text-280","type":"text","heading":"","plain_text":"mon $driver = Selenium::Remote::Driver-&gt;Nouveau(browser_name =&gt; &#39;htmlunit&#39;, remote_server_addr =&gt; &#39;localhost&#39;, Port =&gt; &#39;4444&#39;)","html":"<p>mon $driver = Selenium::Remote::Driver-&gt;Nouveau(browser_name =&gt; &#039;htmlunit&#039;, remote_server_addr =&gt; &#039;localhost&#039;, Port =&gt; &#039;4444&#039;)</p>"},{"id":"text-281","type":"text","heading":"","plain_text":"Avantages","html":"<p>Avantages</p>"},{"id":"text-282","type":"text","heading":"","plain_text":"Fastest implementation of WebDriver\nA pure Java solution and so it is platform independent.\nSupports JavaScript","html":"<p>Fastest implementation of WebDriver\nA pure Java solution and so it is platform independent.\nSupports JavaScript</p>"},{"id":"text-283","type":"text","heading":"","plain_text":"Les inconvénients","html":"<p>Les inconvénients</p>"},{"id":"text-284","type":"text","heading":"","plain_text":"Emulates other browsers’ JavaScript behaviour (see below)","html":"<p>Emulates other browsers’ JavaScript behaviour (see below)</p>"},{"id":"text-285","type":"text","heading":"","plain_text":"JavaScript in the HtmlUnit Driver\nNone of the popular browsers uses the JavaScript engine used by HtmlUnit\n(Rhino). If you test JavaScript using HtmlUnit the results may differ\nsignificantly from those browsers.\nWhen we say “JavaScript” we actually mean “JavaScript and the DOM”. Although\nthe DOM is defined by the W3C each browser has its own quirks and differences\nin their implementation of the DOM and in how JavaScript interacts with it.\nHtmlUnit has an impressively complete implementation of the DOM and has good\nsupport for using JavaScript, but it is no different from any other\nbrowser: it has its own quirks and differences from both the W3C standard and\nthe DOM implementations of the major browsers, despite its ability to mimic\nother browsers.\nWith WebDriver, we had to make a choice; do we enable HtmlUnit’s JavaScript\ncapabilities and run the risk of teams running into problems that only manifest\nthemselves there, or do we leave JavaScript disabled, knowing that there are\nmore and more sites that rely on JavaScript? We took the conservative approach,\nand by default have disabled support when we use HtmlUnit. With each release of\nboth WebDriver and HtmlUnit, we reassess this decision: we hope to enable\nJavaScript by default on the HtmlUnit at some point.","html":"<p>JavaScript in the HtmlUnit Driver\nNone of the popular browsers uses the JavaScript engine used by HtmlUnit\n(Rhino). If you test JavaScript using HtmlUnit the results may differ\nsignificantly from those browsers.\nWhen we say “JavaScript” we actually mean “JavaScript and the DOM”. Although\nthe DOM is defined by the W3C each browser has its own quirks and differences\nin their implementation of the DOM and in how JavaScript interacts with it.\nHtmlUnit has an impressively complete implementation of the DOM and has good\nsupport for using JavaScript, but it is no different from any other\nbrowser: it has its own quirks and differences from both the W3C standard and\nthe DOM implementations of the major browsers, despite its ability to mimic\nother browsers.\nWith WebDriver, we had to make a choice; do we enable HtmlUnit’s JavaScript\ncapabilities and run the risk of teams running into problems that only manifest\nthemselves there, or do we leave JavaScript disabled, knowing that there are\nmore and more sites that rely on JavaScript? We took the conservative approach,\nand by default have disabled support when we use HtmlUnit. With each release of\nboth WebDriver and HtmlUnit, we reassess this decision: we hope to enable\nJavaScript by default on the HtmlUnit at some point.</p>"},{"id":"text-286","type":"text","heading":"","plain_text":"Enabling JavaScript\nIf you can’t wait, enabling JavaScript support is very easy:","html":"<p>Enabling JavaScript\nIf you can’t wait, enabling JavaScript support is very easy:</p>"},{"id":"text-287","type":"text","heading":"","plain_text":"HtmlUnitDriver chauffeur = Nouveau HtmlUnitDriver(vrai)","html":"<p>HtmlUnitDriver chauffeur = Nouveau HtmlUnitDriver(vrai)</p>"},{"id":"text-288","type":"text","heading":"","plain_text":"WebDriver chauffeur = Nouveau RemoteWebDriver(Nouveau Uri(&quot;http://127.0.0.1:4444/wd/hub&quot;),\n                       DesiredCapabilities.HtmlUnitWithJavaScript());","html":"<p>WebDriver chauffeur = Nouveau RemoteWebDriver(Nouveau Uri(&quot;http://127.0.0.1:4444/wd/hub&quot;),\n                       DesiredCapabilities.HtmlUnitWithJavaScript());</p>"},{"id":"text-289","type":"text","heading":"","plain_text":"casquettes = Sélénium::WebDriver::Remote::Les capacités.htmlunit(:javascript_enabled =&gt; vrai)\nchauffeur = Sélénium::WebDriver.pour :remote, :url =&gt; &quot;http://localhost:4444/wd/hub&quot;, :desired_capabilities =&gt; casquettes","html":"<p>casquettes = Sélénium::WebDriver::Remote::Les capacités.htmlunit(:javascript_enabled =&gt; vrai)\nchauffeur = Sélénium::WebDriver.pour :remote, :url =&gt; &quot;http://localhost:4444/wd/hub&quot;, :desired_capabilities =&gt; casquettes</p>"},{"id":"text-290","type":"text","heading":"","plain_text":"chauffeur = webdriver.Remote(&quot;http://localhost:4444/wd/hub&quot;, webdriver.DesiredCapabilities.HTMLUNITWITHJS)","html":"<p>chauffeur = webdriver.Remote(&quot;http://localhost:4444/wd/hub&quot;, webdriver.DesiredCapabilities.HTMLUNITWITHJS)</p>"},{"id":"text-291","type":"text","heading":"","plain_text":"$driver = Nouveau Selenium::Remote::Driver( browser_name=&gt;&#39;firefox&#39;, Port=&gt; 4444, version=&gt;&#39;&#39;, Plate-forme=&gt;&#39;LINUX&#39;, javascript=&gt;1, auto_close=&gt;1)","html":"<p>$driver = Nouveau Selenium::Remote::Driver( browser_name=&gt;&#039;firefox&#039;, Port=&gt; 4444, version=&gt;&#039;&#039;, Plate-forme=&gt;&#039;LINUX&#039;, javascript=&gt;1, auto_close=&gt;1)</p>"},{"id":"text-292","type":"text","heading":"","plain_text":"This will cause the HtmlUnit Driver to emulate Firefox 3.6’s JavaScript\nhandling by default.","html":"<p>This will cause the HtmlUnit Driver to emulate Firefox 3.6’s JavaScript\nhandling by default.</p>"},{"id":"text-293","type":"text","heading":"","plain_text":"Firefox Driver\nControls the Firefox browser using a Firefox plugin.\nThe Firefox Profile that is used is stripped down from what is installed on the\nmachine to only include the Selenium WebDriver.xpi (plugin). A few settings are\nalso changed by default (see the source to see which ones)\nFirefox Driver is capable of being run and is tested on Windows, Mac, Linux.\nCurrently on versions 3.6, 10, latest &#8211; 1, latest","html":"<p>Firefox Driver\nControls the Firefox browser using a Firefox plugin.\nThe Firefox Profile that is used is stripped down from what is installed on the\nmachine to only include the Selenium WebDriver.xpi (plugin). A few settings are\nalso changed by default (see the source to see which ones)\nFirefox Driver is capable of being run and is tested on Windows, Mac, Linux.\nCurrently on versions 3.6, 10, latest &#8211; 1, latest</p>"},{"id":"text-294","type":"text","heading":"","plain_text":"Usage","html":"<p>Usage</p>"},{"id":"text-295","type":"text","heading":"","plain_text":"WebDriver chauffeur = Nouveau FirefoxDriver();","html":"<p>WebDriver chauffeur = Nouveau FirefoxDriver();</p>"},{"id":"text-296","type":"text","heading":"","plain_text":"IWebDriver chauffeur = Nouveau FirefoxDriver();","html":"<p>IWebDriver chauffeur = Nouveau FirefoxDriver();</p>"},{"id":"text-297","type":"text","heading":"","plain_text":"chauffeur = webdriver.Firefox()","html":"<p>chauffeur = webdriver.Firefox()</p>"},{"id":"text-298","type":"text","heading":"","plain_text":"chauffeur = Sélénium::WebDriver.pour :firefox","html":"<p>chauffeur = Sélénium::WebDriver.pour :firefox</p>"},{"id":"text-299","type":"text","heading":"","plain_text":"mon $driver = Selenium::Remote::Driver-&gt;Nouveau;","html":"<p>mon $driver = Selenium::Remote::Driver-&gt;Nouveau;</p>"},{"id":"text-300","type":"text","heading":"","plain_text":"Modifying the Firefox Profile\nSuppose that you wanted to modify the user agent string (as above), but you’ve\ngot a tricked out Firefox profile that contains dozens of useful extensions.\nThere are two ways to obtain this profile. Assuming that the profile has been\ncreated using Firefox’s profile manager (firefox -ProfileManager):","html":"<p>Modifying the Firefox Profile\nSuppose that you wanted to modify the user agent string (as above), but you’ve\ngot a tricked out Firefox profile that contains dozens of useful extensions.\nThere are two ways to obtain this profile. Assuming that the profile has been\ncreated using Firefox’s profile manager (firefox -ProfileManager):</p>"},{"id":"text-301","type":"text","heading":"","plain_text":"ProfilesIni allProfiles = Nouveau ProfilesIni();\nFirefoxProfile profil = allProfiles.getProfile(&quot;WebDriver&quot;)\nprofil.setPreferences(&quot;foo.bar&quot;, 23)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)","html":"<p>ProfilesIni allProfiles = Nouveau ProfilesIni();\nFirefoxProfile profil = allProfiles.getProfile(&quot;WebDriver&quot;)\nprofil.setPreferences(&quot;foo.bar&quot;, 23)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)</p>"},{"id":"text-302","type":"text","heading":"","plain_text":"var profileManager = Nouveau FirefoxProfileManager();\nFirefoxProfile profil = profileManager.GetProfile(&quot;WebDriver&quot;)\nprofil.SetPreference(&quot;foo.bar&quot;, 23)\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)","html":"<p>var profileManager = Nouveau FirefoxProfileManager();\nFirefoxProfile profil = profileManager.GetProfile(&quot;WebDriver&quot;)\nprofil.SetPreference(&quot;foo.bar&quot;, 23)\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)</p>"},{"id":"text-303","type":"text","heading":"","plain_text":"Alternatively, if the profile isn’t already registered with Firefox:","html":"<p>Alternatively, if the profile isn’t already registered with Firefox:</p>"},{"id":"text-304","type":"text","heading":"","plain_text":"File profileDir = Nouveau File(&quot;path/to/top/level/of/profile&quot;)\nFirefoxProfile profil = Nouveau FirefoxProfile(profileDir)\nprofil.addAdditionalPreferences(extraPrefs)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)","html":"<p>File profileDir = Nouveau File(&quot;path/to/top/level/of/profile&quot;)\nFirefoxProfile profil = Nouveau FirefoxProfile(profileDir)\nprofil.addAdditionalPreferences(extraPrefs)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)</p>"},{"id":"text-305","type":"text","heading":"","plain_text":"FirefoxProfile profil = Nouveau FirefoxProfile(&quot;path/to/top/level/of/profile&quot;)\nprofil.SetPreference(&quot;extra&quot;, &quot;pref&quot;)\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)","html":"<p>FirefoxProfile profil = Nouveau FirefoxProfile(&quot;path/to/top/level/of/profile&quot;)\nprofil.SetPreference(&quot;extra&quot;, &quot;pref&quot;)\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)</p>"},{"id":"text-306","type":"text","heading":"","plain_text":"As we develop features in the Firefox Driver, we expose the ability to use them.\nFor example, until we feel native events are stable on Firefox for Linux, they\nare disabled by default. To enable them:","html":"<p>As we develop features in the Firefox Driver, we expose the ability to use them.\nFor example, until we feel native events are stable on Firefox for Linux, they\nare disabled by default. To enable them:</p>"},{"id":"text-307","type":"text","heading":"","plain_text":"FirefoxProfile profil = Nouveau FirefoxProfile();\nprofil.setEnableNativeEvents(vrai)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)","html":"<p>FirefoxProfile profil = Nouveau FirefoxProfile();\nprofil.setEnableNativeEvents(vrai)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)</p>"},{"id":"text-308","type":"text","heading":"","plain_text":"var profil = Nouveau FirefoxProfile EnableNativeEvents = vrai;\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)","html":"<p>var profil = Nouveau FirefoxProfile EnableNativeEvents = vrai;\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)</p>"},{"id":"text-309","type":"text","heading":"","plain_text":"profil = webdriver.FirefoxProfile()\nprofil.native_events_enabled = Vrai\nchauffeur = webdriver.Firefox(profil)","html":"<p>profil = webdriver.FirefoxProfile()\nprofil.native_events_enabled = Vrai\nchauffeur = webdriver.Firefox(profil)</p>"},{"id":"text-310","type":"text","heading":"","plain_text":"profil = Sélénium::WebDriver::Firefox::Profil.Nouveau\nprofil.native_events = vrai\nchauffeur = Sélénium::WebDriver.pour :firefox, :profile =&gt; profil","html":"<p>profil = Sélénium::WebDriver::Firefox::Profil.Nouveau\nprofil.native_events = vrai\nchauffeur = Sélénium::WebDriver.pour :firefox, :profile =&gt; profil</p>"},{"id":"text-311","type":"text","heading":"","plain_text":"Internet Explorer Driver\nThe InternetExplorerDriver is a standalone server which implements WebDriver’s wire protocol. This driver has been tested with IE 7, 8, 9, 10, and 11 on appropriate combinations of Vista, Windows 7, Windows 8, and Windows 8.1. As of 15 April 2014, IE 6 is no longer supported.\nThe driver supports running 32-bit and 64-bit versions of the browser. The choice of how to determine which “bit-ness” to use in launching the browser depends on which version of the IEDriverServer.exe is launched. If the 32-bit version of IEDriverServer.exe is launched, the 32-bit version of IE will be launched. Similarly, if the 64-bit version of IEDriverServer.exe is launched, the 64-bit version of IE will be launched.","html":"<p>Internet Explorer Driver\nThe InternetExplorerDriver is a standalone server which implements WebDriver’s wire protocol. This driver has been tested with IE 7, 8, 9, 10, and 11 on appropriate combinations of Vista, Windows 7, Windows 8, and Windows 8.1. As of 15 April 2014, IE 6 is no longer supported.\nThe driver supports running 32-bit and 64-bit versions of the browser. The choice of how to determine which “bit-ness” to use in launching the browser depends on which version of the IEDriverServer.exe is launched. If the 32-bit version of IEDriverServer.exe is launched, the 32-bit version of IE will be launched. Similarly, if the 64-bit version of IEDriverServer.exe is launched, the 64-bit version of IE will be launched.</p>"},{"id":"text-312","type":"text","heading":"","plain_text":"Usage","html":"<p>Usage</p>"},{"id":"text-313","type":"text","heading":"","plain_text":"WebDriver chauffeur = Nouveau InternetExplorerDriver();","html":"<p>WebDriver chauffeur = Nouveau InternetExplorerDriver();</p>"},{"id":"text-314","type":"text","heading":"","plain_text":"IWebDriver chauffeur = Nouveau InternetExlorerDriver();","html":"<p>IWebDriver chauffeur = Nouveau InternetExlorerDriver();</p>"},{"id":"text-315","type":"text","heading":"","plain_text":"chauffeur = Sélénium::WebDriver.pour :ie","html":"<p>chauffeur = Sélénium::WebDriver.pour :ie</p>"},{"id":"text-316","type":"text","heading":"","plain_text":"mon $driver = Selenium::Remote::Driver-&gt;Nouveau(browser_name =&gt; &#39;internet explorer&#39;)","html":"<p>mon $driver = Selenium::Remote::Driver-&gt;Nouveau(browser_name =&gt; &#039;internet explorer&#039;)</p>"},{"id":"text-317","type":"text","heading":"","plain_text":"Avantages","html":"<p>Avantages</p>"},{"id":"text-318","type":"text","heading":"","plain_text":"Runs in a real browser and supports Javascript","html":"<p>Runs in a real browser and supports Javascript</p>"},{"id":"text-319","type":"text","heading":"","plain_text":"Les inconvénients","html":"<p>Les inconvénients</p>"},{"id":"text-320","type":"text","heading":"","plain_text":"Obviously the InternetExplorerDriver will only work on Windows!\nComparatively slow (though still pretty snappy!)","html":"<p>Obviously the InternetExplorerDriver will only work on Windows!\nComparatively slow (though still pretty snappy!)</p>"},{"id":"text-321","type":"text","heading":"","plain_text":"ChromeDriver\nChromeDriver is maintained / supported by the Chromium\nproject iteslf. WebDriver works with Chrome through the chromedriver binary (found on the chromium\nproject’s download page). You need to have both chromedriver and a version of chrome browser installed.\nchromedriver needs to be placed somewhere on your system’s path in order for WebDriver to automatically\ndiscover it. The Chrome browser itself is discovered by chromedriver in the default installation path.\nThese both can be overridden by environment variables. Please refer to the wiki\nfor more information.","html":"<p>ChromeDriver\nChromeDriver is maintained / supported by the Chromium\nproject iteslf. WebDriver works with Chrome through the chromedriver binary (found on the chromium\nproject’s download page). You need to have both chromedriver and a version of chrome browser installed.\nchromedriver needs to be placed somewhere on your system’s path in order for WebDriver to automatically\ndiscover it. The Chrome browser itself is discovered by chromedriver in the default installation path.\nThese both can be overridden by environment variables. Please refer to the wiki\nfor more information.</p>"},{"id":"text-322","type":"text","heading":"","plain_text":"Usage","html":"<p>Usage</p>"},{"id":"text-323","type":"text","heading":"","plain_text":"WebDriver chauffeur = Nouveau ChromeDriver();","html":"<p>WebDriver chauffeur = Nouveau ChromeDriver();</p>"},{"id":"text-324","type":"text","heading":"","plain_text":"IWebDriver chauffeur = Nouveau ChromeDriver();","html":"<p>IWebDriver chauffeur = Nouveau ChromeDriver();</p>"},{"id":"text-325","type":"text","heading":"","plain_text":"chauffeur = webdriver.Chrome()","html":"<p>chauffeur = webdriver.Chrome()</p>"},{"id":"text-326","type":"text","heading":"","plain_text":"chauffeur = Sélénium::WebDriver.pour :chrome","html":"<p>chauffeur = Sélénium::WebDriver.pour :chrome</p>"},{"id":"text-327","type":"text","heading":"","plain_text":"mon $driver = Selenium::Remote::Driver-&gt;Nouveau(browser_name =&gt; &#39;chrome&#39;)","html":"<p>mon $driver = Selenium::Remote::Driver-&gt;Nouveau(browser_name =&gt; &#039;chrome&#039;)</p>"},{"id":"text-328","type":"text","heading":"","plain_text":"Avantages","html":"<p>Avantages</p>"},{"id":"text-329","type":"text","heading":"","plain_text":"Runs in a real browser and supports JavaScript\nBecause Chrome is a Webkit-based browser, the ChromeDriver may allow you to\nverify that your site works in Safari. Note that since Chrome uses its own V8\nJavaScript engine rather than Safari’s Nitro engine, JavaScript execution may\ndiffer.","html":"<p>Runs in a real browser and supports JavaScript\nBecause Chrome is a Webkit-based browser, the ChromeDriver may allow you to\nverify that your site works in Safari. Note that since Chrome uses its own V8\nJavaScript engine rather than Safari’s Nitro engine, JavaScript execution may\ndiffer.</p>"},{"id":"text-330","type":"text","heading":"","plain_text":"Alternative Back-Ends: Mixing WebDriver and RC Technologies","html":"<p>Alternative Back-Ends: Mixing WebDriver and RC Technologies</p>"},{"id":"text-331","type":"text","heading":"","plain_text":"WebDriver-Backed Selenium-RC\nThe Java version of WebDriver provides an implementation of the Selenium-RC API.  These means that\nyou can use the underlying WebDriver technology using the Selenium-RC API.  This is primarily\nprovided for backwards compatibility.  It allows those who have existing test suites using the\nSelenium-RC API to use WebDriver under the covers.  It’s provided to help ease the migration path\nto Selenium-WebDriver.  Also, this allows one to use both APIs, side-by-side, in the same test code.\nSelenium-WebDriver is used like this:","html":"<p>WebDriver-Backed Selenium-RC\nThe Java version of WebDriver provides an implementation of the Selenium-RC API.  These means that\nyou can use the underlying WebDriver technology using the Selenium-RC API.  This is primarily\nprovided for backwards compatibility.  It allows those who have existing test suites using the\nSelenium-RC API to use WebDriver under the covers.  It’s provided to help ease the migration path\nto Selenium-WebDriver.  Also, this allows one to use both APIs, side-by-side, in the same test code.\nSelenium-WebDriver is used like this:</p>"},{"id":"text-332","type":"text","heading":"","plain_text":"// You may use any WebDriver implementation. Firefox is used here as an example\nWebDriver chauffeur = Nouveau FirefoxDriver();","html":"<p>// You may use any WebDriver implementation. Firefox is used here as an example\nWebDriver chauffeur = Nouveau FirefoxDriver();</p>"},{"id":"text-333","type":"text","heading":"","plain_text":"// A &quot;base url&quot;, used by selenium to resolve relative URLs\n Chaîne baseUrl = &quot;http://www.google.com&quot;;","html":"<p>// A &quot;base url&quot;, used by selenium to resolve relative URLs\n Chaîne baseUrl = &quot;http://www.google.com&quot;;</p>"},{"id":"text-334","type":"text","heading":"","plain_text":"// Create the Selenium implementation\nSélénium sélénium = Nouveau WebDriverBackedSelenium(chauffeur, baseUrl)","html":"<p>// Create the Selenium implementation\nSélénium sélénium = Nouveau WebDriverBackedSelenium(chauffeur, baseUrl)</p>"},{"id":"text-335","type":"text","heading":"","plain_text":"// Perform actions with selenium","html":"<p>// Perform actions with selenium</p>"},{"id":"text-336","type":"text","heading":"","plain_text":"sélénium.ouvrir(&quot;http://www.google.com&quot;)\nsélénium.type(&quot;name=q&quot;, &quot;cheese&quot;)\nsélénium.Cliquez sur(&quot;name=btnG&quot;)","html":"<p>sélénium.ouvrir(&quot;http://www.google.com&quot;)\nsélénium.type(&quot;name=q&quot;, &quot;cheese&quot;)\nsélénium.Cliquez sur(&quot;name=btnG&quot;)</p>"},{"id":"text-337","type":"text","heading":"","plain_text":"// Get the underlying WebDriver implementation back. This will refer to the\n// same WebDriver instance as the &quot;driver&quot; variable above.\nWebDriver driverInstance = ((WebDriverBackedSelenium) sélénium).getWrappedDriver();","html":"<p>// Get the underlying WebDriver implementation back. This will refer to the\n// same WebDriver instance as the &quot;driver&quot; variable above.\nWebDriver driverInstance = ((WebDriverBackedSelenium) sélénium).getWrappedDriver();</p>"},{"id":"text-338","type":"text","heading":"","plain_text":"//Finally, close the browser. Call stop on the WebDriverBackedSelenium instance\n//instead of calling driver.quit(). Otherwise, the JVM will continue running after\n//the browser has been closed.\nsélénium.Arrêtez();","html":"<p>//Finally, close the browser. Call stop on the WebDriverBackedSelenium instance\n//instead of calling driver.quit(). Otherwise, the JVM will continue running after\n//the browser has been closed.\nsélénium.Arrêtez();</p>"},{"id":"text-339","type":"text","heading":"","plain_text":"Avantages","html":"<p>Avantages</p>"},{"id":"text-340","type":"text","heading":"","plain_text":"Allows for the WebDriver and Selenium APIs to live side-by-side\nProvides a simple mechanism for a managed migration from the Selenium RC API\nto WebDriver’s\nDoes not require the standalone Selenium RC server to be run","html":"<p>Allows for the WebDriver and Selenium APIs to live side-by-side\nProvides a simple mechanism for a managed migration from the Selenium RC API\nto WebDriver’s\nDoes not require the standalone Selenium RC server to be run</p>"},{"id":"text-341","type":"text","heading":"","plain_text":"Les inconvénients","html":"<p>Les inconvénients</p>"},{"id":"text-342","type":"text","heading":"","plain_text":"Does not implement every method\nMore advanced Selenium usage (using “browserbot” or other built-in JavaScript\nmethods from Selenium Core) may not work\nSome methods may be slower due to underlying implementation differences","html":"<p>Does not implement every method\nMore advanced Selenium usage (using “browserbot” or other built-in JavaScript\nmethods from Selenium Core) may not work\nSome methods may be slower due to underlying implementation differences</p>"},{"id":"text-343","type":"text","heading":"","plain_text":"Backing WebDriver with Selenium\nWebDriver doesn’t support as many browsers as Selenium RC does, so in order to\nprovide that support while still using the WebDriver API, you can make use of\nla SeleneseCommandExecutor\nSafari is supported in this way with the following code (be sure to disable\npop-up blocking):","html":"<p>Backing WebDriver with Selenium\nWebDriver doesn’t support as many browsers as Selenium RC does, so in order to\nprovide that support while still using the WebDriver API, you can make use of\nla SeleneseCommandExecutor\nSafari is supported in this way with the following code (be sure to disable\npop-up blocking):</p>"},{"id":"text-344","type":"text","heading":"","plain_text":"DesiredCapabilities capacités = Nouveau DesiredCapabilities();\ncapacités.setBrowserName(&quot;safari&quot;)\nCommandExecutor executor = Nouveau SeleneseCommandExecutor(Nouveau URL(&quot;http://localhost:4444/&quot;), Nouveau URL(&quot;http://www.google.com/&quot;), capacités)\nWebDriver chauffeur = Nouveau RemoteWebDriver(executor, capacités)","html":"<p>DesiredCapabilities capacités = Nouveau DesiredCapabilities();\ncapacités.setBrowserName(&quot;safari&quot;)\nCommandExecutor executor = Nouveau SeleneseCommandExecutor(Nouveau URL(&quot;http://localhost:4444/&quot;), Nouveau URL(&quot;http://www.google.com/&quot;), capacités)\nWebDriver chauffeur = Nouveau RemoteWebDriver(executor, capacités)</p>"},{"id":"text-345","type":"text","heading":"","plain_text":"There are currently some major limitations with this approach, notably that\nfindElements doesn’t work as expected. Also, because we’re using Selenium Core\nfor the heavy lifting of driving the browser, you are limited by the JavaScript\nsandbox.","html":"<p>There are currently some major limitations with this approach, notably that\nfindElements doesn’t work as expected. Also, because we’re using Selenium Core\nfor the heavy lifting of driving the browser, you are limited by the JavaScript\nsandbox.</p>"},{"id":"text-346","type":"text","heading":"","plain_text":"Running Standalone Selenium Server for use with RemoteDrivers\nFrom Selenium’s Download page download selenium-server-standalone-.jar and optionally IEDriverServer. If you plan to work with Chrome, download it from Google Code.\nUnpack IEDriverServer and/or chromedriver and put them in a directory which is on the $PATH / %PATH% &#8211; the Selenium Server should then be able to handle requests for IE / Chrome without additional modifications.\nStart the server on the command line with","html":"<p>Running Standalone Selenium Server for use with RemoteDrivers\nFrom Selenium’s Download page download selenium-server-standalone-.jar and optionally IEDriverServer. If you plan to work with Chrome, download it from Google Code.\nUnpack IEDriverServer and/or chromedriver and put them in a directory which is on the $PATH / %PATH% &#8211; the Selenium Server should then be able to handle requests for IE / Chrome without additional modifications.\nStart the server on the command line with</p>"},{"id":"text-347","type":"text","heading":"","plain_text":"java -jar /selenium-server-standalone-.pot","html":"<p>java -jar /selenium-server-standalone-.pot</p>"},{"id":"text-348","type":"text","heading":"","plain_text":"If you want to use native events functionality, indicate this on the command line with the option","html":"<p>If you want to use native events functionality, indicate this on the command line with the option</p>"},{"id":"text-349","type":"text","heading":"","plain_text":"-Dwebdriver.enable.native.events=1","html":"<p>-Dwebdriver.enable.native.events=1</p>"},{"id":"text-350","type":"text","heading":"","plain_text":"For other command line options, execute","html":"<p>For other command line options, execute</p>"},{"id":"text-351","type":"text","heading":"","plain_text":"java -jar /selenium-server-standalone-.jar -help","html":"<p>java -jar /selenium-server-standalone-.jar -help</p>"},{"id":"text-352","type":"text","heading":"","plain_text":"In order to function properly, the following ports should be allowed incoming TCP connections: 4444, 7054-5 (or twice as many ports as the number of concurrent instances you plan to run). Under Windows, you may need to unblock the applications as well.","html":"<p>In order to function properly, the following ports should be allowed incoming TCP connections: 4444, 7054-5 (or twice as many ports as the number of concurrent instances you plan to run). Under Windows, you may need to unblock the applications as well.</p>"},{"id":"text-353","type":"text","heading":"","plain_text":"Ressources supplémentaires\nYou can find further resources for WebDriver\nin WebDriver’s wiki\nOf course, don’t hesitate to do an internet search on any Selenium topic, including\nSelenium-WebDriver’s drivers.  There are quite a few blogs on Selenium along with numerous posts\non various user forums.  Additionally the Selenium User’s Group is a great resource.\nhttp://groups.google.com/group/selenium-users","html":"<p>Ressources supplémentaires\nYou can find further resources for WebDriver\nin WebDriver’s wiki\nOf course, don’t hesitate to do an internet search on any Selenium topic, including\nSelenium-WebDriver’s drivers.  There are quite a few blogs on Selenium along with numerous posts\non various user forums.  Additionally the Selenium User’s Group is a great resource.\nhttp://groups.google.com/group/selenium-users</p>"},{"id":"text-354","type":"text","heading":"","plain_text":"Prochaines étapes\nThis chapter has simply been a high level walkthrough of WebDriver and some of its key\ncapabilities.  Once getting familiar with the Selenium-WebDriver API you will then want to learn\nhow to build test suites for maintainability, extensibility, and reduced fragility when features of\nthe AUT frequently change.  The approach most Selenium experts are now recommending is to design\nyour test code using the Page Object Design Pattern along with possibly a Page Factory.\nSelenium-WebDriver provides support for this by supplying a PageFactory class in Java and C#.\nThis is presented, along with other advanced topics, in the\nChapitre suivant. Also, for high-level description of this\ntechnique, you may want to look at the\nTest Design Considerations chapter. Both of these\nchapters present techniques for writing more maintainable tests by making your test code more\nmodular.","html":"<p>Prochaines étapes\nThis chapter has simply been a high level walkthrough of WebDriver and some of its key\ncapabilities.  Once getting familiar with the Selenium-WebDriver API you will then want to learn\nhow to build test suites for maintainability, extensibility, and reduced fragility when features of\nthe AUT frequently change.  The approach most Selenium experts are now recommending is to design\nyour test code using the Page Object Design Pattern along with possibly a Page Factory.\nSelenium-WebDriver provides support for this by supplying a PageFactory class in Java and C#.\nThis is presented, along with other advanced topics, in the\nChapitre suivant. Also, for high-level description of this\ntechnique, you may want to look at the\nTest Design Considerations chapter. Both of these\nchapters present techniques for writing more maintainable tests by making your test code more\nmodular.</p>"},{"id":"text-355","type":"text","heading":"","plain_text":"Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]","html":"<p>Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]</p>"}],"sections":[{"id":"text-1","heading":"Text","content":"REMARQUE: nous travaillons actuellement à la documentation de ces sections.\nNous pensons que les informations ici sont exactes, mais sachez que nous travaillons toujours sur ce\nchapitre. Des informations supplémentaires seront fournies au fur et à mesure, ce qui devrait rendre ce chapitre plus utile.\nsolide."},{"id":"text-2","heading":"Text","content":"Présentation de WebDriver\nLa principale nouvelle fonctionnalité de Selenium 2.0 est l&#39;intégration de l&#39;API WebDriver.\nWebDriver est conçu pour fournir une interface de programmation plus simple et plus concise en plus de\nrésoudre certaines limitations de l’API Selenium-RC. Selenium-WebDriver a été développé\npour mieux prendre en charge les pages Web dynamiques où des éléments d&#39;une page peuvent changer sans la page\nlui-même étant rechargé. L’objectif de WebDriver est de fournir une solution orientée objet bien conçue.\nAPI offrant une prise en charge améliorée des problèmes de test d&#39;applications Web avancés et avancés."},{"id":"text-3","heading":"Text","content":"Comment WebDriver &quot;pilote-t-il&quot; le navigateur par rapport à Selenium-RC?\nSelenium-WebDriver appelle directement le navigateur en utilisant le support natif de chaque navigateur pour l’automatisation.\nLa manière dont ces appels directs sont effectués et les fonctionnalités qu’ils prennent en charge dépend du navigateur que vous utilisez.\nDes informations sur chaque ‘pilote de navigateur’ sont fournies plus loin dans ce chapitre.\nPour ceux qui sont familiers avec Selenium-RC, c&#39;est très différent de ce que vous avez l&#39;habitude de faire. Sélénium-RC\nfonctionné de la même manière pour chaque navigateur pris en charge. Il &quot;injecte&quot; des fonctions javascript dans le navigateur\nlorsque le navigateur a été chargé et a ensuite utilisé son javascript pour piloter l’AUT dans le navigateur.\nWebDriver n&#39;utilise pas cette technique. Encore une fois, il pilote le navigateur directement à l&#39;aide de son navigateur.\nsupport intégré pour l&#39;automatisation."},{"id":"text-4","heading":"Text","content":"WebDriver et le Selenium-Server\nLe serveur Selenium peut être nécessaire ou non, selon l’utilisation que vous envisagez d’utiliser Selenium-WebDriver.\nSi votre navigateur et vos tests s&#39;exécutent tous sur le même ordinateur et que vos tests utilisent uniquement l&#39;API WebDriver,\nalors vous n&#39;avez pas besoin d&#39;exécuter le serveur Selenium; WebDriver exécutera le navigateur directement.\nCependant, il existe certaines raisons d&#39;utiliser Selenium-Server avec Selenium-WebDriver."},{"id":"text-5","heading":"Text","content":"Vous utilisez Selenium-Grid pour répartir vos tests sur plusieurs machines ou machines virtuelles (VM).\nVous souhaitez vous connecter à un ordinateur distant doté d&#39;une version de navigateur particulière qui n&#39;est pas activée\nvotre machine actuelle.\nVous n&#39;utilisez pas les liaisons Java (c&#39;est-à-dire Python, C # ou Ruby) et souhaitez utiliser le pilote HtmlUnit"},{"id":"text-6","heading":"Text","content":"Configuration d&#39;un projet Selenium-WebDriver\nInstaller Selenium signifie configurer un projet dans un développement pour pouvoir écrire un programme en utilisant\nSélénium. Cela dépend de votre langage de programmation et de votre environnement de développement."},{"id":"text-7","heading":"Text","content":"Java\nLe moyen le plus simple de configurer un projet Java Selenium 2.0 consiste à utiliser Maven. Maven téléchargera le\njava (la bibliothèque du client java Selenium 2.0) et toutes ses dépendances, et créera le\nprojet pour vous, en utilisant un fichier maven pom.xml (configuration du projet). Une fois que vous avez fait cela, vous\npouvez importer le projet maven dans votre IDE préféré, IntelliJ IDEA ou Eclipse.\nCommencez par créer un dossier contenant vos fichiers de projet Selenium. Ensuite, pour utiliser Maven, vous avez besoin d’un\nfichier pom.xml. Cela peut être créé avec un éditeur de texte. Nous n’enseignerons pas le\ndes détails sur les fichiers pom.xml ou sur l&#39;utilisation de Maven car il existe déjà d&#39;excellentes références à ce sujet.\nVotre fichier pom.xml ressemblera à ceci. Créez ce fichier dans le dossier que vous avez créé pour\nvotre projet."},{"id":"text-8","heading":"Text","content":"&lt;projet xmlns =&quot;http://maven.apache.org/POM/4.0.0&quot;\n                 xmlns: xsi =&quot;http://www.w3.org/2001/XMLSchema-instance&quot;\n                 xsi: schemaLocation =&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&gt;\n        4.0.0\n        MySel20Proj\n        MySel20Proj\n        1,0\n        \n            \n                org.seleniumhq.selenium\n                sélénium-serveur\n                3.0.1"},{"id":"text-9","heading":"Text","content":"Assurez-vous de spécifier la version la plus récente. Au moment de la rédaction, la version indiquée ci-dessus était\nles plus courants, cependant, des rejets fréquents ont eu lieu immédiatement après la publication de Selenium 2.0.\nConsultez la page de téléchargement de Maven pour connaître la version actuelle et éditez la dépendance ci-dessus en conséquence.\nMaintenant, à partir d&#39;une ligne de commande, CD dans le répertoire du projet et exécutez maven comme suit.\nCela téléchargera Selenium et toutes ses dépendances et les ajoutera au projet.\nEnfin, importez le projet dans votre environnement de développement préféré. Pour ceux qui ne connaissent pas\navec cela, nous avons fourni une annexe qui montre cela.\nImporter un projet maven dans IntelliJ IDEA.\nImporter un projet maven dans Eclipse."},{"id":"text-10","heading":"Text","content":"C #\nA partir de Selenium 2.2.0, les liaisons C # sont distribuées sous la forme d’un ensemble de dll signées avec d’autres\ndépendance dlls. Avant la version 2.2.0, toutes les dll de Selenium n’étaient pas signées.\nPour inclure Selenium dans votre projet, téléchargez simplement la dernière\nfichier zip sélénium-dotnet de http://selenium-release.storage.googleapis.com/index.html.\nSi vous utilisez Windows Vista ou supérieur, vous devez débloquer le fichier zip avant\nDécompressez-le: Faites un clic droit sur le fichier zip, cliquez sur «Propriétés», cliquez sur «Débloquer»\net cliquez sur “OK”.\nDécompressez le contenu du fichier zip et ajoutez une référence à chacun des fichiers décompressés.\nDLL à votre projet dans Visual Studio (ou votre IDE de choix).\nPaquets officiels NuGet:\nRC\nWebDriver\nWebDriverBackedSelenium\nSoutien"},{"id":"text-11","heading":"Text","content":"Python\nSi vous utilisez Python pour l’automatisation des tests, vous êtes probablement déjà familiarisé avec le développement.\nen Python. Pour ajouter Selenium à votre environnement Python, exécutez la commande suivante à partir de\nune ligne de commande.\nPip nécessite l&#39;installation de pip. Pip a également une dépendance.\nsur setuptools.\nL’enseignement du développement Python lui-même dépasse le cadre de ce document, mais il existe de nombreux\nLes ressources sur Python et les développeurs potentiels de votre organisation peuvent vous aider à vous mettre à niveau."},{"id":"text-12","heading":"Text","content":"Rubis\nSi vous utilisez Ruby pour l’automatisation des tests, vous êtes probablement déjà familiarisé avec le développement.\nen rubis. Pour ajouter Selenium à votre environnement Ruby, exécutez la commande suivante à partir de\nune ligne de commande."},{"id":"text-13","heading":"Text","content":"bijou installer sélénium-webdriver"},{"id":"text-14","heading":"Text","content":"L’enseignement du développement de Ruby lui-même dépasse le cadre de ce document, mais il existe de nombreuses\nLes ressources sur Ruby et les développeurs potentiels de votre organisation peuvent vous aider à vous mettre à niveau."},{"id":"text-15","heading":"Text","content":"Perl\nLes liaisons Perl sont fournies par des tiers. Veuillez vous reporter à la documentation correspondante pour savoir comment\ninstaller / commencer. Il existe une liaison Perl connue à ce jour."},{"id":"text-16","heading":"Text","content":"JavaScript\nSi vous utilisez node.js pour développer votre application, le projet sélénium fournit des liaisons Javascript sur npm.\nInstallez les liaisons Javascript avec npm:"},{"id":"text-17","heading":"Text","content":"npm installer sélénium-webdriver"},{"id":"text-18","heading":"Text","content":"Vous pouvez trouver la documentation de l&#39;API ici."},{"id":"text-19","heading":"Text","content":"Migration de Selenium 1.0\nPour ceux qui ont déjà écrit des suites de tests en utilisant Selenium 1.0, nous avons fourni des conseils sur la façon de\nmigrez votre code existant vers Selenium 2.0. Simon Stewart, développeur principal de Selenium 2.0,\na écrit un article sur la migration de Selenium 1.0. Nous avons inclus cela en annexe.\nMigration de Selenium RC vers Selenium WebDriver"},{"id":"text-20","heading":"Text","content":"Présentation de l&#39;API Selenium-WebDriver par exemple\nWebDriver est un outil permettant d’automatiser le test d’applications Web, en particulier\npour vérifier qu&#39;ils fonctionnent comme prévu. Son objectif est de fournir une API conviviale\nfacile à explorer et à comprendre, plus facile à utiliser que l&#39;API Selenium-RC (1.0),\nce qui aidera à rendre vos tests plus faciles à\nlire et maintenir. Il n’est lié à aucun cadre de test particulier, il peut donc\nêtre utilisé aussi bien dans un projet de test unitaire ou à partir d’une ancienne méthode «principale».\nCette section présente l’API de WebDriver et vous aide à commencer à devenir\nfamilier avec elle. Commencez par configurer un projet WebDriver si vous ne l’avez pas déjà fait.\nCeci a été décrit dans la section précédente, Configuration d&#39;un projet Selenium-WebDriver.\nUne fois votre projet configuré, vous pouvez voir que WebDriver agit comme n&#39;importe quelle bibliothèque normale:\nentièrement autonome, et vous n’avez généralement pas besoin de vous souvenir de commencer\nprocessus supplémentaires ou exécuter les programmes d&#39;installation avant de l&#39;utiliser, par opposition au serveur proxy\navec Selenium-RC.\nRemarque: des étapes supplémentaires sont nécessaires pour utiliser ChromeDriver, Opera Driver, Android Driver.\net pilote iOS\nVous êtes maintenant prêt à écrire du code. Voici un moyen facile de commencer\nexemple, qui recherche le terme &quot;Fromage&quot; sur Google, puis affiche le\ntitre de la page de résultats sur la console."},{"id":"text-21","heading":"Text","content":"paquet org.openqa.selenium.example;"},{"id":"text-22","heading":"Text","content":"importation org.openqa.selenium.By;\nimportation org.openqa.selenium.WebDriver;\nimportation org.openqa.selenium.WebElement;\nimportation org.openqa.selenium.firefox.FirefoxDriver;\nimportation org.openqa.selenium.support.ui.ExpectedCondition;\nimportation org.openqa.selenium.support.ui.WebDriverWait;"},{"id":"text-23","heading":"Text","content":"Publique classe Selenium2Example  \n    Publique statique vide principale(Chaîne[] args) \n        // Créer une nouvelle instance du pilote Firefox\n        // Notez que le reste du code repose sur l&#39;interface, \n        // pas la mise en œuvre.\n        WebDriver chauffeur = Nouveau FirefoxDriver();"},{"id":"text-24","heading":"Text","content":"// Et maintenant, utilisez ceci pour visiter Google\n        chauffeur.obtenir(&quot;http://www.google.com&quot;)\n        // Alternativement, la même chose peut être faite comme ça\n        // driver.navigate (). to (&quot;http://www.google.com&quot;);"},{"id":"text-25","heading":"Text","content":"// Trouver l&#39;élément de saisie de texte par son nom\n        WebElement élément = chauffeur.findElement(Par.prénom(&quot;q&quot;));"},{"id":"text-26","heading":"Text","content":"// Entrez quelque chose à rechercher\n        élément.sendKeys(&quot;Fromage!&quot;)"},{"id":"text-27","heading":"Text","content":"// Soumettez maintenant le formulaire. WebDriver trouvera la forme pour nous à partir de l&#39;élément\n        élément.soumettre();"},{"id":"text-28","heading":"Text","content":"// Vérifier le titre de la page\n        Système.en dehors.imprimer(&quot;Le titre de la page est:&quot; + chauffeur.getTitle());\n        \n        // La recherche de Google est rendue dynamiquement avec JavaScript.\n        // Attend le chargement de la page, délai d&#39;expiration après 10 secondes\n        (Nouveau WebDriverWait(chauffeur, dix)).jusqu&#39;à ce que(Nouveau Condition attendue&lt;Booléen&gt; () \n            Publique Booléen appliquer(WebDriver ré) \n                revenir ré.getTitle()toLowerCase()commence avec(&quot;fromage!&quot;)\n            \n        );"},{"id":"text-29","heading":"Text","content":"// devrait voir: &quot;cheese! - Google Search&quot;\n        Système.en dehors.imprimer(&quot;Le titre de la page est:&quot; + chauffeur.getTitle());\n        \n        // Fermer le navigateur\n        chauffeur.quitter();"},{"id":"text-30","heading":"Text","content":"en utilisant OpenQA.Selenium;\nen utilisant OpenQA.Selenium.Firefox;"},{"id":"text-31","heading":"Text","content":"// Requiert une référence à WebDriver.Support.dll\nen utilisant OpenQA.Selenium.Support.UI;"},{"id":"text-32","heading":"Text","content":"classe GoogleSuggest"},{"id":"text-33","heading":"Text","content":"statique vide Principale(chaîne[] args)\n    \n        // Crée une nouvelle instance du pilote Firefox.\n        // Notez qu&#39;il est encapsulé dans une clause using afin que le navigateur soit fermé \n        // et le WebDriver est disposé (même face aux exceptions)."},{"id":"text-34","heading":"Text","content":"// Notez également que le reste du code repose sur l&#39;interface, \n        // pas la mise en œuvre."},{"id":"text-35","heading":"Text","content":"// Notez également que d&#39;autres pilotes (InternetExplorerDriver,\n        // ChromeDriver, etc.) nécessitera une configuration supplémentaire \n        // avant que cet exemple fonctionne. Voir les pages wiki pour le\n        // pilotes individuels sur http://code.google.com/p/selenium/wiki\n        // pour plus d&#39;informations.\n        en utilisant (IWebDriver chauffeur = Nouveau FirefoxDriver())\n        \n            // Remarque la navigation est légèrement différente de la version Java\n            // C&#39;est parce que &#39;get&#39; est un mot clé en C #\n            chauffeur.Naviguer()GoToUrl(&quot;http://www.google.com/&quot;)\n    \n            // Trouver l&#39;élément de saisie de texte par son nom\n            IWebElement question = chauffeur.FindElement(Par.prénom(&quot;q&quot;));\n    \n            // Entrez quelque chose à rechercher\n            question.SendKeys(&quot;Fromage&quot;)\n    \n            // Soumettez maintenant le formulaire. WebDriver trouvera la forme pour nous à partir de l&#39;élément\n            question.Soumettre();\n    \n            // La recherche de Google est rendue dynamiquement avec JavaScript.\n            // Attend le chargement de la page, délai d&#39;expiration après 10 secondes\n            var attendre = Nouveau WebDriverWait(chauffeur, TimeSpan.À partir de secondes(dix));\n            attendre.Jusqu&#39;à ce que(ré =&gt; ré.Titre.Commence avec(&quot;fromage&quot;, Comparaison de chaînes.OrdinalIgnoreCase));\n    \n            // devrait voir: &quot;Cheese - Google Search&quot; (pour une locale anglaise)\n            Console.WriteLine(&quot;Le titre de la page est:&quot; + chauffeur.Titre)"},{"id":"text-36","heading":"Text","content":"de sélénium importation webdriver\nde sélénium.common.exceptions importation TimeoutException\nde selenium.webdriver.support.ui importation WebDriverWait # disponible depuis 2.4.0\nde selenium.webdriver.support importation conditions_attendues comme CE # disponible depuis 2.26.0"},{"id":"text-37","heading":"Text","content":"# Créer une nouvelle instance du pilote Firefox\nchauffeur = webdriver.Firefox()"},{"id":"text-38","heading":"Text","content":"# aller à la page d&#39;accueil de google\nchauffeur.obtenir(&quot;http://www.google.com&quot;)"},{"id":"text-39","heading":"Text","content":"# la page est ajaxy donc le titre est à l&#39;origine ceci:\nimpression chauffeur.Titre"},{"id":"text-40","heading":"Text","content":"# trouve que l&#39;attribut name est q (le champ de recherche google)\ninputElement = chauffeur.find_element_by_name(&quot;q&quot;)"},{"id":"text-41","heading":"Text","content":"# tapez dans la recherche\ninputElement.send_keys(&quot;fromage!&quot;)"},{"id":"text-42","heading":"Text","content":"# soumettre le formulaire (bien que google recherche automatiquement maintenant sans soumettre)\ninputElement.soumettre()"},{"id":"text-43","heading":"Text","content":"essayer:\n    # nous devons attendre que la page se rafraîchit, la dernière chose qui semble avoir été mise à jour est le titre\n    WebDriverWait(chauffeur, dix).jusqu&#39;à ce que(CE.title_contains(&quot;fromage!&quot;))"},{"id":"text-44","heading":"Text","content":"# Vous devriez voir &quot;fromage! - Recherche Google&quot;\n    impression chauffeur.Titre"},{"id":"text-45","heading":"Text","content":"enfin:\n    chauffeur.quitter()"},{"id":"text-46","heading":"Text","content":"exiger &#39;rubygems&#39;\nexiger &#39;sélénium-webdriver&#39;"},{"id":"text-47","heading":"Text","content":"chauffeur = Sélénium::WebDriver.pour : firefox\nchauffeur.obtenir &quot;http://google.com&quot;"},{"id":"text-48","heading":"Text","content":"élément = chauffeur.find_element :prénom =&gt; &quot;q&quot;\nélément.send_keys &quot;Fromage!&quot;\nélément.soumettre"},{"id":"text-49","heading":"Text","content":"met &quot;Le titre de la page est #driver.title &quot;"},{"id":"text-50","heading":"Text","content":"attendre = Sélénium::WebDriver::Attendre.Nouveau(:temps libre =&gt; dix)\nattendre.jusqu&#39;à ce que  chauffeur.Titre.downcase.Commencer avec? &quot;fromage!&quot;"},{"id":"text-51","heading":"Text","content":"met &quot;Le titre de la page est #driver.title &quot;\nchauffeur.quitter"},{"id":"text-52","heading":"Text","content":"var chauffeur = Nouveau webdriver.Constructeur()construire();\nchauffeur.obtenir(&quot;http://www.google.com&quot;)"},{"id":"text-53","heading":"Text","content":"var élément = chauffeur.findElement(webdriver.Par.prénom(&#39;q&#39;));\nélément.sendKeys(&#39;Fromage!&#39;)\nélément.soumettre();"},{"id":"text-54","heading":"Text","content":"chauffeur.getTitle()puis(une fonction(Titre) \n  console.bûche(&#39;Le titre de la page est:&#39; + Titre)\n);"},{"id":"text-55","heading":"Text","content":"chauffeur.attendre(une fonction() \n  revenir chauffeur.getTitle()puis(une fonction(Titre) \n    revenir Titre.toLowerCase()lastIndexOf(&#39;fromage!&#39;, 0) === 0;\n  );\n, 3000)"},{"id":"text-56","heading":"Text","content":"chauffeur.getTitle()puis(une fonction(Titre) \n  console.bûche(&#39;Le titre de la page est:&#39; + Titre)\n);"},{"id":"text-57","heading":"Text","content":"chauffeur.quitter();"},{"id":"text-58","heading":"Text","content":"utilisation Sélénium :: Télécommande :: Pilote;"},{"id":"text-59","heading":"Text","content":"# Créer une nouvelle instance du pilote\nmon conducteur $ = Sélénium :: Télécommande :: Pilote-&gt;Nouveau;"},{"id":"text-60","heading":"Text","content":"# Aller à la page d&#39;accueil de Google\nconducteur $-&gt;obtenir(&quot;http://www.google.com&quot;)"},{"id":"text-61","heading":"Text","content":"# Imprimer le titre de la page d&#39;origine\nmon $ title = conducteur $-&gt;get_title();\nimpression &quot;$ title  n&quot;;"},{"id":"text-62","heading":"Text","content":"# Trouver l&#39;élément dont l&#39;attribut name est q (champ de recherche Google)\nmon $ inputElement = conducteur $-&gt;find_element(&quot;q&quot;, &quot;prénom&quot;)"},{"id":"text-63","heading":"Text","content":"# tapez dans la recherche\n$ inputElement-&gt;send_keys(&quot;fromage!&quot;)"},{"id":"text-64","heading":"Text","content":"# soumettre le formulaire (bien que google recherche automatiquement maintenant sans soumettre)\n$ inputElement-&gt;soumettre();"},{"id":"text-65","heading":"Text","content":"# Définissez le délai d&#39;expiration de la recherche d&#39;éléments sur 10 secondes (0 par défaut)\nconducteur $-&gt;set_implicit_wait_timeout(10000)\n# puis utilisez XPath pour rechercher un titre de page contenant du fromage!\nconducteur $-&gt;find_element(&quot;/ html / head / title[contains(translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'), 'cheese!')]&quot;)"},{"id":"text-66","heading":"Text","content":"# Vous devriez voir &quot;fromage! - Recherche Google&quot;\n$ title = conducteur $-&gt;get_title();\nimpression &quot;$ title  n&quot;;"},{"id":"text-67","heading":"Text","content":"conducteur $-&gt;quitter();"},{"id":"text-68","heading":"Text","content":"Dans les prochaines sections, vous en apprendrez plus sur l’utilisation de WebDriver pour des applications\ntelles que la navigation en avant et en arrière dans l’historique de votre navigateur, et comment\ntester des sites Web qui utilisent des cadres et des fenêtres. Nous fournissons également un plus\ndiscussions approfondies et exemples."},{"id":"text-69","heading":"Text","content":"Commandes et opérations de l&#39;API Selenium-WebDriver"},{"id":"text-70","heading":"Text","content":"Aller chercher une page\nLa première chose que vous souhaiterez probablement faire avec WebDriver est d’accéder à une page.\nLa façon habituelle de faire ceci est d&#39;appeler “get”:"},{"id":"text-71","heading":"Text","content":"chauffeur.obtenir(&quot;http://www.google.com&quot;)"},{"id":"text-72","heading":"Text","content":"chauffeur.URL = &quot;http://www.google.com&quot;;"},{"id":"text-73","heading":"Text","content":"chauffeur.obtenir &quot;http://www.google.com&quot;"},{"id":"text-74","heading":"Text","content":"chauffeur.obtenir(&quot;http://www.google.com&quot;)"},{"id":"text-75","heading":"Text","content":"conducteur $-&gt;obtenir(&quot;http://www.google.com&quot;)"},{"id":"text-76","heading":"Text","content":"chauffeur.obtenir(&quot;http://www.google.com&quot;)"},{"id":"text-77","heading":"Text","content":"Dépend de plusieurs facteurs, y compris la combinaison système d&#39;exploitation / navigateur,\nWebDriver peut attendre ou ne pas attendre le chargement de la page. Dans certaines circonstances,\nWebDriver peut rendre le contrôle avant que le chargement de la page soit terminé ou même commencé.\nPour assurer la robustesse, vous devez attendre que le ou les éléments existent dans la page à l&#39;aide de\nAttentes explicites et implicites."},{"id":"text-78","heading":"Text","content":"Localisation d&#39;éléments d&#39;interface utilisateur (WebElements)\nLa localisation d&#39;éléments dans WebDriver peut être effectuée sur l&#39;instance WebDriver elle-même ou sur un WebElement.\nChacune des liaisons de langue expose une méthode «Trouver élément» et «Trouver des éléments». L&#39;ancien retour\nun objet WebElement correspondant à la requête et lève une exception si un tel élément est introuvable.\nCe dernier renvoie une liste de WebElements, éventuellement vide si aucun élément DOM ne correspond à la requête.\nLes méthodes &quot;Rechercher&quot; prennent un objet de requête ou de localisateur appelé &quot;Par&quot;. Les stratégies «par» sont énumérées ci-dessous."},{"id":"text-79","heading":"Text","content":"Par ID\nC&#39;est le moyen le plus efficace et préféré de localiser un élément. Pièges courants que les développeurs d&#39;interface utilisateur\nmake est d&#39;avoir des identifiants non uniques sur une page ou de générer automatiquement l&#39;identifiant, les deux doivent être évités. Une classe\nsur un élément html est plus approprié qu&#39;un identifiant généré automatiquement.\nExemple de recherche d&#39;un élément ressemblant à ceci:"},{"id":"text-80","heading":"Text","content":"&lt;div identifiant=&quot;coolestWidgetEvah&quot;&gt;...&lt;/div&gt;"},{"id":"text-81","heading":"Text","content":"WebElement élément = chauffeur.findElement(Par.identifiant(&quot;coolestWidgetEvah&quot;));"},{"id":"text-82","heading":"Text","content":"IWebElement élément = chauffeur.FindElement(Par.Id(&quot;coolestWidgetEvah&quot;));"},{"id":"text-83","heading":"Text","content":"élément = chauffeur.find_element(: id, &quot;coolestWidgetEvah&quot;)"},{"id":"text-84","heading":"Text","content":"élément = chauffeur.find_element_by_id(&quot;coolestWidgetEvah&quot;)"},{"id":"text-85","heading":"Text","content":"ou"},{"id":"text-86","heading":"Text","content":"de selenium.webdriver.common.by importation Par\nélément = chauffeur.find_element(par=Par.ID, valeur=&quot;coolestWidgetEvah&quot;)"},{"id":"text-87","heading":"Text","content":"élément $ = conducteur $-&gt;find_element(&#39;coolestWidgetEvah&#39;,&#39;id&#39;)"},{"id":"text-88","heading":"Text","content":"var élément = chauffeur.findElement(Par.identifiant(&#39;coolestWidgetEvah&#39;));"},{"id":"text-89","heading":"Text","content":"Par nom de classe\n“Classe” dans ce cas fait référence à l&#39;attribut sur l&#39;élément DOM. Souvent, dans la pratique, il y a\nde nombreux éléments DOM avec le même nom de classe, la recherche de plusieurs éléments devient alors la solution la plus pratique.\noption sur la recherche du premier élément.\nExemple de recherche d&#39;un élément ressemblant à ceci:"},{"id":"text-90","heading":"Text","content":"&lt;div classe=&quot;fromage&quot;&gt; &lt;envergure&gt;Cheddar&lt;/envergure&gt; &lt;/div&gt; &lt;div classe=&quot;fromage&quot;&gt; &lt;envergure&gt;Gouda&lt;/envergure&gt; &lt;/div&gt;"},{"id":"text-91","heading":"Text","content":"liste&lt;WebElement&gt; les fromages = chauffeur.findElements(Par.nom du cours(&quot;fromage&quot;));"},{"id":"text-92","heading":"Text","content":"IListe&lt;IWebElement&gt; les fromages = chauffeur.FindElements(Par.Nom du cours(&quot;fromage&quot;));"},{"id":"text-93","heading":"Text","content":"les fromages = chauffeur.find_elements(:nom du cours, &quot;fromage&quot;)"},{"id":"text-94","heading":"Text","content":"ou"},{"id":"text-95","heading":"Text","content":"les fromages = chauffeur.find_elements(:classe, &quot;fromage&quot;)"},{"id":"text-96","heading":"Text","content":"les fromages = chauffeur.find_elements_by_class_name(&quot;fromage&quot;)"},{"id":"text-97","heading":"Text","content":"ou"},{"id":"text-98","heading":"Text","content":"de selenium.webdriver.common.by importation Par\nles fromages = chauffeur.find_elements(Par.NOM DU COURS, &quot;fromage&quot;)"},{"id":"text-99","heading":"Text","content":"@les fromages = conducteur $-&gt;find_elements(&#39;fromage&#39;, &#39;classe&#39;)"},{"id":"text-100","heading":"Text","content":"chauffeur.findElements(Par.nom du cours(&quot;fromage&quot;))\n.puis(les fromages =&gt; console.bûche(les fromages.longueur));"},{"id":"text-101","heading":"Text","content":"Par nom de tag\nLe nom de la balise DOM de l&#39;élément.\nExemple de recherche d&#39;un élément ressemblant à ceci:"},{"id":"text-102","heading":"Text","content":"&lt;iframe src=&quot;...&quot;&gt; &lt;/iframe&gt;"},{"id":"text-103","heading":"Text","content":"WebElement Cadre = chauffeur.findElement(Par.tagName(&quot;iframe&quot;));"},{"id":"text-104","heading":"Text","content":"IWebElement Cadre = chauffeur.FindElement(Par.TagName(&quot;iframe&quot;));"},{"id":"text-105","heading":"Text","content":"Cadre = chauffeur.find_element(: tag_name, &quot;iframe&quot;)"},{"id":"text-106","heading":"Text","content":"Cadre = chauffeur.find_element_by_tag_name(&quot;iframe&quot;)"},{"id":"text-107","heading":"Text","content":"ou"},{"id":"text-108","heading":"Text","content":"de selenium.webdriver.common.by importation Par\nCadre = chauffeur.find_element(Par.TAG_NAME, &quot;iframe&quot;)"},{"id":"text-109","heading":"Text","content":"$ frame = conducteur $-&gt;find_element(&#39;iframe&#39;, &#39;tag_name&#39;)"},{"id":"text-110","heading":"Text","content":"var Cadre = chauffeur.findElement(Par.tagName(&#39;iframe&#39;));"},{"id":"text-111","heading":"Text","content":"De nom\nRecherchez l&#39;élément d&#39;entrée avec l&#39;attribut name correspondant.\nExemple de recherche d&#39;un élément ressemblant à ceci:"},{"id":"text-112","heading":"Text","content":"&lt;contribution prénom=&quot;fromage&quot; type=&quot;texte&quot;/&gt;"},{"id":"text-113","heading":"Text","content":"WebElement fromage = chauffeur.findElement(Par.prénom(&quot;fromage&quot;));"},{"id":"text-114","heading":"Text","content":"IWebElement fromage = chauffeur.FindElement(Par.prénom(&quot;fromage&quot;));"},{"id":"text-115","heading":"Text","content":"fromage = chauffeur.find_element(:prénom, &quot;fromage&quot;)"},{"id":"text-116","heading":"Text","content":"fromage = chauffeur.find_element_by_name(&quot;fromage&quot;)"},{"id":"text-117","heading":"Text","content":"ou"},{"id":"text-118","heading":"Text","content":"de selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.PRÉNOM, &quot;fromage&quot;)"},{"id":"text-119","heading":"Text","content":"$ fromage = conducteur $-&gt;find_element(&#39;fromage&#39;, &#39;prénom&#39;)"},{"id":"text-120","heading":"Text","content":"var fromage = chauffeur.findElement(Par.prénom(&#39;fromage&#39;));"},{"id":"text-121","heading":"Text","content":"Par lien texte\nRecherchez l&#39;élément de lien avec le texte visible correspondant.\nExemple de recherche d&#39;un élément ressemblant à ceci:"},{"id":"text-122","heading":"Text","content":"&lt;une href=&quot;http://www.google.com/search?q=cheese&quot;&gt;fromage&lt;/une&gt;&gt;"},{"id":"text-123","heading":"Text","content":"WebElement fromage = chauffeur.findElement(Par.linkText(&quot;fromage&quot;));"},{"id":"text-124","heading":"Text","content":"IWebElement fromage = chauffeur.FindElement(Par.LinkText(&quot;fromage&quot;));"},{"id":"text-125","heading":"Text","content":"fromage = chauffeur.find_element(: link_text, &quot;fromage&quot;)"},{"id":"text-126","heading":"Text","content":"ou"},{"id":"text-127","heading":"Text","content":"fromage = chauffeur.find_element(:lien, &quot;fromage&quot;)"},{"id":"text-128","heading":"Text","content":"fromage = chauffeur.find_element_by_link_text(&quot;fromage&quot;)"},{"id":"text-129","heading":"Text","content":"ou"},{"id":"text-130","heading":"Text","content":"de selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.LINK_TEXT, &quot;fromage&quot;)"},{"id":"text-131","heading":"Text","content":"$ fromage = conducteur $-&gt;find_element(&#39;fromage&#39;, &#39;link_text&#39;)"},{"id":"text-132","heading":"Text","content":"var fromage = chauffeur.findElement(Par.linkText(&#39;fromage&#39;));"},{"id":"text-133","heading":"Text","content":"Par texte de lien partiel\nRecherchez l&#39;élément de lien avec du texte visible correspondant partiellement.\nExemple de recherche d&#39;un élément ressemblant à ceci:"},{"id":"text-134","heading":"Text","content":"&lt;une href=&quot;http://www.google.com/search?q=cheese&quot;&gt;recherche de fromage&lt;/une&gt;&gt;"},{"id":"text-135","heading":"Text","content":"WebElement fromage = chauffeur.findElement(Par.partialLinkText(&quot;fromage&quot;));"},{"id":"text-136","heading":"Text","content":"IWebElement fromage = chauffeur.FindElement(Par.PartialLinkText(&quot;fromage&quot;));"},{"id":"text-137","heading":"Text","content":"fromage = chauffeur.find_element(: partial_link_text, &quot;fromage&quot;)"},{"id":"text-138","heading":"Text","content":"fromage = chauffeur.find_element_by_partial_link_text(&quot;fromage&quot;)"},{"id":"text-139","heading":"Text","content":"ou"},{"id":"text-140","heading":"Text","content":"de selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.PARTIAL_LINK_TEXT, &quot;fromage&quot;)"},{"id":"text-141","heading":"Text","content":"$ fromage = conducteur $-&gt;find_element(&#39;fromage&#39;, &#39;partial_link_text&#39;)"},{"id":"text-142","heading":"Text","content":"var fromage = chauffeur.findElement(Par.partialLinkText(&#39;fromage&#39;));"},{"id":"text-143","heading":"Text","content":"Par CSS\nComme son nom l&#39;indique, il s&#39;agit d&#39;une stratégie de localisation par css. Prise en charge du navigateur natif\nest utilisé par défaut, veuillez donc vous référer aux sélecteurs CSS de w3c pour obtenir une liste des sélecteurs CSS disponibles. Si un navigateur n&#39;a pas\nsupport natif pour les requêtes css, alors Sizzle est utilisé. IE 6,7 et FF3,0\nutilise actuellement Sizzle comme moteur de requête css.\nAttention, tous les navigateurs n&#39;ont pas été créés égaux. Certains CSS pouvant fonctionner dans une version peuvent ne pas fonctionner.\nen autre.\nExemple de trouver le fromage ci-dessous:"},{"id":"text-144","heading":"Text","content":"&lt;div identifiant=&quot;aliments&quot;&gt; &lt;envergure classe=&quot;laitier&quot;&gt;Lait&lt;/envergure&gt; &lt;envergure classe=&quot;laiterie vieillie&quot;&gt;fromage&lt;/envergure&gt; &lt;/div&gt;"},{"id":"text-145","heading":"Text","content":"WebElement fromage = chauffeur.findElement(Par.cssSelector(&quot;#food span.dairy.aged&quot;));"},{"id":"text-146","heading":"Text","content":"IWebElement fromage = chauffeur.FindElement(Par.CssSélecteur(&quot;#food span.dairy.aged&quot;));"},{"id":"text-147","heading":"Text","content":"fromage = chauffeur.find_element(: css, &quot;#food span.dairy.aged&quot;)"},{"id":"text-148","heading":"Text","content":"fromage = chauffeur.find_element_by_css_selector(&quot;#food span.dairy.aged&quot;)"},{"id":"text-149","heading":"Text","content":"ou"},{"id":"text-150","heading":"Text","content":"de selenium.webdriver.common.by importation Par\nfromage = chauffeur.find_element(Par.CSS_SELECTOR, &quot;#food span.dairy.aged&quot;)"},{"id":"text-151","heading":"Text","content":"$ fromage = conducteur $-&gt;find_element(&#39;#food span.dairy.aged&#39;, &#39;css&#39;)"},{"id":"text-152","heading":"Text","content":"var fromage = chauffeur.findElement(Par.css(&#39;#food span.dairy.aged&#39;));"},{"id":"text-153","heading":"Text","content":"Par XPath\nÀ un niveau élevé, WebDriver utilise les fonctionnalités XPath natives d’un navigateur partout\npossible. Sur les navigateurs qui ne prennent pas en charge XPath en natif, nous avons\nfourni notre propre mise en œuvre. Cela peut conduire à un comportement inattendu\nà moins que vous ne connaissiez les différences entre les différents moteurs XPath.\nCeci est un petit résumé, donc pour le morceau de HTML suivant:"},{"id":"text-154","heading":"Text","content":"&lt;contribution type=&quot;texte&quot; prénom=&quot;Exemple&quot; /&gt;\n&lt;CONTRIBUTION type=&quot;texte&quot; prénom=&quot;autre&quot; /&gt;"},{"id":"text-155","heading":"Text","content":"liste&lt;WebElement&gt; contributions = chauffeur.findElements(Par.xpath(&quot;//contribution&quot;));"},{"id":"text-156","heading":"Text","content":"IListe&lt;IWebElement&gt; contributions = chauffeur.FindElements(Par.XPath(&quot;//contribution&quot;));"},{"id":"text-157","heading":"Text","content":"contributions = chauffeur.find_elements(: xpath, &quot;//contribution&quot;)"},{"id":"text-158","heading":"Text","content":"contributions = chauffeur.find_elements_by_xpath(&quot;//contribution&quot;)"},{"id":"text-159","heading":"Text","content":"ou"},{"id":"text-160","heading":"Text","content":"de selenium.webdriver.common.by importation Par\ncontributions = chauffeur.find_elements(Par.XPATH, &quot;//contribution&quot;)"},{"id":"text-161","heading":"Text","content":"@contributions = conducteur $-&gt;find_elements(&#39;//contribution&#39;)"},{"id":"text-162","heading":"Text","content":"chauffeur.findElements(Par.xpath(&quot;//contribution&quot;))\n.puis(les fromages =&gt; console.bûche(les fromages.longueur));"},{"id":"text-163","heading":"Text","content":"Le nombre de correspondances suivantes sera trouvé\nParfois, les éléments HTML n&#39;ont pas besoin d&#39;attributs pour être explicitement déclarés\nparce qu&#39;ils vont par défaut aux valeurs connues. Par exemple, la balise «input» ne\npas besoin de l’attribut «type» car il utilise par défaut «text». La règle de\npouce lorsque vous utilisez xpath dans WebDriver est que vous ne devrait pas attendez-vous à pouvoir\nfaire correspondre à ces attributs implicites."},{"id":"text-164","heading":"Text","content":"Utiliser JavaScript\nVous pouvez exécuter du javascript arbitraire pour trouver un élément et tant que vous retournez un élément DOM,\nil sera automatiquement converti en objet WebElement.\nExemple simple sur une page sur laquelle jQuery est chargé:"},{"id":"text-165","heading":"Text","content":"WebElement élément = (WebElement) ((JavascriptExecutor)chauffeur).executeScript(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)"},{"id":"text-166","heading":"Text","content":"IWebElement élément = (IWebElement) ((IJavaScriptExecutor)chauffeur).ExecuteScript(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)"},{"id":"text-167","heading":"Text","content":"élément = chauffeur.execute_script(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)"},{"id":"text-168","heading":"Text","content":"élément = chauffeur.execute_script(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)"},{"id":"text-169","heading":"Text","content":"élément = conducteur $-&gt;execute_script(&quot;retour $ (&#39;. fromage&#39;)[0]&quot;)"},{"id":"text-170","heading":"Text","content":"Trouver tous les éléments d&#39;entrée pour chaque étiquette sur une page:"},{"id":"text-171","heading":"Text","content":"liste&lt;WebElement&gt; Étiquettes = chauffeur.findElements(Par.tagName(&quot;étiquette&quot;));\nliste&lt;WebElement&gt; contributions = (liste&lt;WebElement&gt;) ((JavascriptExecutor)chauffeur).executeScript(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, Étiquettes)"},{"id":"text-172","heading":"Text","content":"IListe&lt;IWebElement&gt; Étiquettes = chauffeur.FindElements(Par.TagName(&quot;étiquette&quot;));\nIListe&lt;IWebElement&gt; contributions = (IListe&lt;IWebElement&gt;) ((IJavaScriptExecutor)chauffeur).ExecuteScript(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, Étiquettes)"},{"id":"text-173","heading":"Text","content":"Étiquettes = chauffeur.find_elements(: tag_name, &quot;étiquette&quot;)\ncontributions = chauffeur.execute_script(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, Étiquettes)"},{"id":"text-174","heading":"Text","content":"Étiquettes = chauffeur.find_elements_by_tag_name(&quot;étiquette&quot;)\ncontributions = chauffeur.execute_script(\n    &quot;var labels = arguments[0], entrées = []; pour (var i = 0; i &lt;labels.length; i ++) &quot; +\n    &quot;inputs.push (document.getElementById (étiquettes[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, Étiquettes)"},{"id":"text-175","heading":"Text","content":"mon @Étiquettes = conducteur $-&gt;find_elements(&#39;étiquette&#39;, &#39;tag_name&#39;)\nmon $ entrées = conducteur $-&gt;execute_script(&quot;var labels = arguments, input = []; pour (var i = 0; i &lt;labels.length; i ++) inputs.push (document.getElementById (labels[i].getAttribute (&#39;for&#39;)));  retourne les entrées; &quot;, @Étiquettes)"},{"id":"text-176","heading":"Text","content":"Obtenir des valeurs de texte\nLes utilisateurs souhaitent souvent récupérer la valeur innerText contenue dans un élément. Cela renvoie une valeur de chaîne unique. Notez que cela ne fera que renvoyer le texte visible affiché sur la page."},{"id":"text-177","heading":"Text","content":"WebElement élément = chauffeur.findElement(Par.identifiant(&quot;elementID&quot;));\nélément.getText();"},{"id":"text-178","heading":"Text","content":"IWebElement élément = chauffeur.findElement(Par.identifiant(&quot;elementID&quot;));\nélément.Texte;"},{"id":"text-179","heading":"Text","content":"élément = chauffeur.find_element : id =&gt; &quot;element_id&quot;\nélément.texte"},{"id":"text-180","heading":"Text","content":"élément = chauffeur.find_element_by_id(&quot;element_id&quot;)\nélément.texte"},{"id":"text-181","heading":"Text","content":"var element = driver.findElement (By.id (&#39;elementID&#39;));\nelement.getText (). then (text =&gt; console.log (`Text is $ text`));"},{"id":"text-182","heading":"Text","content":"Entrée utilisateur &#8211; Remplir des formulaires\nNous avons déjà vu comment saisir du texte dans une zone de texte ou un champ de texte, mais\nsur les autres éléments? Vous pouvez &quot;basculer&quot; l’état des cases à cocher, et vous\npouvez cliquer sur «cliquer» pour définir quelque chose comme une balise OPTION sélectionnée. Transaction\navec les balises SELECT n’est pas si mal:"},{"id":"text-183","heading":"Text","content":"WebElement sélectionner = chauffeur.findElement(Par.tagName(&quot;sélectionner&quot;));\nliste&lt;WebElement&gt; toutes les options = sélectionner.findElements(Par.tagName(&quot;option&quot;));\npour (WebElement option : toutes les options) \n    Système.en dehors.imprimer(Chaîne.format(&quot;La valeur est:% s&quot;, option.obtenirAttribuer(&quot;valeur&quot;)));\n    option.Cliquez sur();"},{"id":"text-184","heading":"Text","content":"IWebElement sélectionner = chauffeur.FindElement(Par.TagName(&quot;sélectionner&quot;));\nIListe&lt;IWebElement&gt; toutes les options = sélectionner.FindElements(Par.TagName(&quot;option&quot;));\npour chaque (IWebElement option dans toutes les options)"},{"id":"text-185","heading":"Text","content":"Console.WriteLine(&quot;La valeur est: &quot; + option.GetAttribute(&quot;valeur&quot;));\n    option.Cliquez sur();"},{"id":"text-186","heading":"Text","content":"sélectionner = chauffeur.find_element(: tag_name, &quot;sélectionner&quot;)\ntoutes les options = sélectionner.find_elements(: tag_name, &quot;option&quot;)\ntoutes les options.chaque faire |option|\n  met &quot;La valeur est: &quot; + option.attribut(&quot;valeur&quot;)\n  option.Cliquez sur\nfin"},{"id":"text-187","heading":"Text","content":"sélectionner = chauffeur.find_element_by_tag_name(&quot;sélectionner&quot;)\ntoutes les options = sélectionner.find_elements_by_tag_name(&quot;option&quot;)\npour option dans toutes les options:\n    impression &quot;La valeur est: &quot; + option.get_attribute(&quot;valeur&quot;)\n    option.Cliquez sur()"},{"id":"text-188","heading":"Text","content":"$ select = conducteur $-&gt;find_element(&#39;sélectionner&#39;, &#39;tag_name&#39;)\n@toutes les options = conducteur $-&gt;find_child_element($ select, &quot;option&quot;, &#39;tag_name&#39;)\npour chaque option $ (@toutes les options) \n    impression &quot;La valeur est: &quot;.option $-&gt;get_attribute(&quot;valeur&quot;).&quot; n&quot;;\n    option $-&gt;Cliquez sur();"},{"id":"text-189","heading":"Text","content":"Ceci trouvera le premier élément “SELECT” sur la page et parcourra chaque\nà tour de rôle, en affichant leurs valeurs et en les sélectionnant à tour de rôle.\nComme vous le constaterez, ce n’est pas le moyen le plus efficace de traiter avec SELECT\néléments. Les classes de support de WebDriver comprennent une classe appelée «Select», qui\nfournit des méthodes utiles pour interagir avec ceux-ci."},{"id":"text-190","heading":"Text","content":"Sélectionner sélectionner = Nouveau Sélectionner(chauffeur.findElement(Par.tagName(&quot;sélectionner&quot;)));\nsélectionner.tout déselectionner();\nsélectionner.selectByVisibleText(&quot;Edam&quot;)"},{"id":"text-191","heading":"Text","content":"SelectElement sélectionner = Nouveau SelectElement(chauffeur.FindElement(Par.TagName(&quot;sélectionner&quot;)));\nsélectionner.Tout déselectionner();\nsélectionner.SelectByText(&quot;Edam&quot;)"},{"id":"text-192","heading":"Text","content":"# disponible depuis 2.14\n    sélectionner = Sélénium::WebDriver::Soutien::Sélectionner.Nouveau(chauffeur.find_element(: tag_name, &quot;sélectionner&quot;))\n    sélectionner.tout déselectionner()\n    sélectionner.select_by(:texte, &quot;Edam&quot;)"},{"id":"text-193","heading":"Text","content":"# disponible depuis 2.12\nde selenium.webdriver.support.ui importation Sélectionner\nsélectionner = Sélectionner(chauffeur.find_element_by_tag_name(&quot;sélectionner&quot;))\nsélectionner.tout déselectionner()\nsélectionner.select_by_visible_text(&quot;Edam&quot;)"},{"id":"text-194","heading":"Text","content":"Ceci désélectionnera toutes les OPTIONS du premier SELECT sur la page, puis\nsélectionnez l&#39;OPTION avec le texte affiché «Edam».\nUne fois le formulaire rempli, vous souhaiterez probablement le soumettre. Un\nPour ce faire, recherchez le bouton «Soumettre» et cliquez dessus:"},{"id":"text-195","heading":"Text","content":"chauffeur.findElement(Par.identifiant(&quot;soumettre&quot;)).Cliquez sur();"},{"id":"text-196","heading":"Text","content":"chauffeur.FindElement(Par.Id(&quot;soumettre&quot;)).Cliquez sur();"},{"id":"text-197","heading":"Text","content":"chauffeur.find_element(: id, &quot;soumettre&quot;).Cliquez sur"},{"id":"text-198","heading":"Text","content":"chauffeur.find_element_by_id(&quot;soumettre&quot;).Cliquez sur()"},{"id":"text-199","heading":"Text","content":"conducteur $-&gt;find_element(&#39;soumettre&#39;,&#39;id&#39;)-&gt;Cliquez sur()"},{"id":"text-200","heading":"Text","content":"chauffeur.findElement(Par.identifiant(&#39;soumettre&#39;).Cliquez sur();"},{"id":"text-201","heading":"Text","content":"WebDriver a aussi la méthode de commodité «submit» sur chaque élément.\nSi vous appelez cela sur un élément du formulaire, WebDriver remontera le DOM.\njusqu&#39;à ce qu&#39;il trouve le formulaire ci-joint et appelle ensuite soumettre à ce sujet. Si la\nl’élément n’est pas dans un formulaire, alors le NoSuchElementException    sera jeté:"},{"id":"text-202","heading":"Text","content":"Se déplacer entre Windows et les cadres\nCertaines applications Web ont plusieurs cadres ou plusieurs fenêtres. WebDriver prend en charge\nvous déplacer entre les fenêtres nommées en utilisant la méthode «switchTo»:"},{"id":"text-203","heading":"Text","content":"chauffeur.basculer vers()la fenêtre(&quot;windowName&quot;)"},{"id":"text-204","heading":"Text","content":"chauffeur.Basculer vers()La fenêtre(&quot;windowName&quot;)"},{"id":"text-205","heading":"Text","content":"chauffeur.basculer vers.la fenêtre(&quot;windowName&quot;)"},{"id":"text-206","heading":"Text","content":"chauffeur.basculer vers.la fenêtre(&quot;windowName&quot;)"},{"id":"text-207","heading":"Text","content":"conducteur $-&gt;switch_to_window(&quot;windowName&quot;)"},{"id":"text-208","heading":"Text","content":"chauffeur.basculer vers()la fenêtre(&#39;windowName&#39;)"},{"id":"text-209","heading":"Text","content":"Tous les appels à chauffeur    sera maintenant interprété comme étant dirigé vers le\nfenêtre particulière. Mais comment connaissez-vous le nom de la fenêtre? Regardez le\njavascript ou lien qui l&#39;a ouvert:"},{"id":"text-210","heading":"Text","content":"&lt;une href=&quot;quelque part.html&quot; cible=&quot;windowName&quot;&gt;Cliquez ici pour ouvrir une nouvelle fenêtre&lt;/une&gt;"},{"id":"text-211","heading":"Text","content":"Alternativement, vous pouvez passer un &quot;handle de fenêtre&quot; à &quot;switchTo (). Window ()&quot;\nméthode. Sachant cela, il est possible de parcourir toutes les fenêtres ouvertes comme ceci:"},{"id":"text-212","heading":"Text","content":"pour (Chaîne manipuler : chauffeur.getWindowHandles()) \n    chauffeur.basculer vers()la fenêtre(manipuler)"},{"id":"text-213","heading":"Text","content":"pour chaque (chaîne manipuler dans chauffeur.Poignées de fenêtre) \n    chauffeur.Basculer vers()La fenêtre(manipuler)"},{"id":"text-214","heading":"Text","content":"chauffeur.window_handles.chaque faire |manipuler|\n    chauffeur.switch_to.la fenêtre manipuler\nfin"},{"id":"text-215","heading":"Text","content":"pour manipuler dans chauffeur.window_handles:\n    chauffeur.switch_to.la fenêtre(manipuler)"},{"id":"text-216","heading":"Text","content":"$windows = $driver-&gt;get_window_handles()\nforeach $window (@$windows) \n    $driver-&gt;switch_to_window($window)"},{"id":"text-217","heading":"Text","content":"You can also switch from frame to frame (or into iframes):"},{"id":"text-218","heading":"Text","content":"chauffeur.switchTo().Cadre(&quot;frameName&quot;)"},{"id":"text-219","heading":"Text","content":"chauffeur.SwitchTo().Cadre(&quot;frameName&quot;)"},{"id":"text-220","heading":"Text","content":"chauffeur.switch_to.Cadre &quot;frameName&quot;"},{"id":"text-221","heading":"Text","content":"chauffeur.switch_to.Cadre(&quot;frameName&quot;)"},{"id":"text-222","heading":"Text","content":"$driver-&gt;switch_to_frame(&#39;frameName&#39;)"},{"id":"text-223","heading":"Text","content":"chauffeur.switchTo().Cadre(&#39;frameName&#39;)"},{"id":"text-224","heading":"Text","content":"Navigation: History and Location\nEarlier, we covered navigating to a page using the “get” command (\ndriver.get(&quot;http://www.example.com&quot;)    ou driver.Url=&quot;http://www.example.com&quot;    in C#).\nAs you’ve seen, WebDriver has a number of smaller, task-focused interfaces, and navigation is a useful task.\nBecause loading a page is such a fundamental requirement, the method to do this\nlives on the main WebDriver interface, but it’s simply a synonym to:"},{"id":"text-225","heading":"Text","content":"chauffeur.naviguer().à(&quot;http://www.example.com&quot;)"},{"id":"text-226","heading":"Text","content":"chauffeur.Navigate().GoToUrl(&quot;http://www.example.com&quot;)"},{"id":"text-227","heading":"Text","content":"chauffeur.naviguer.à &quot;http://www.example.com&quot;"},{"id":"text-228","heading":"Text","content":"chauffeur.obtenir(&quot;http://www.example.com&quot;)  # python doesn&#39;t have driver.navigate"},{"id":"text-229","heading":"Text","content":"$driver-&gt;naviguer(&#39;http://www.example.com&#39;)"},{"id":"text-230","heading":"Text","content":"chauffeur.naviguer().à(&#39;http://www.example.com&#39;)"},{"id":"text-231","heading":"Text","content":"To reiterate: “navigate().to()&quot; et &quot;get()” do exactly the same thing.\nOne’s just a lot easier to type than the other!\nThe “navigate” interface also exposes the ability to move backwards and forwards in your browser’s history:"},{"id":"text-232","heading":"Text","content":"chauffeur.naviguer().vers l&#39;avant();\nchauffeur.naviguer().retour();"},{"id":"text-233","heading":"Text","content":"chauffeur.Navigate().Vers l&#39;avant();\nchauffeur.Navigate().Retour();"},{"id":"text-234","heading":"Text","content":"chauffeur.naviguer.vers l&#39;avant\nchauffeur.naviguer.retour"},{"id":"text-235","heading":"Text","content":"chauffeur.vers l&#39;avant()\nchauffeur.retour()"},{"id":"text-236","heading":"Text","content":"chauffeur.naviguer().vers l&#39;avant();\nchauffeur.naviguer().retour();"},{"id":"text-237","heading":"Text","content":"Please be aware that this functionality depends entirely on the underlying\nnavigateur. It’s just possible that something unexpected may happen when you call\nthese methods if you’re used to the behaviour of one browser over another."},{"id":"text-238","heading":"Text","content":"Cookies\nBefore we leave these next steps, you may be interested in understanding how to\nuse cookies. First of all, you need to be on the domain that the cookie will be\nvalid for. If you are trying to preset cookies before\nyou start interacting with a site and your homepage is large / takes a while to load\nan alternative is to find a smaller page on the site (typically the 404 page is small,\npar exemple. http://example.com/some404page)."},{"id":"text-239","heading":"Text","content":"// Go to the correct domain\nchauffeur.obtenir(&quot;http://www.example.com&quot;)"},{"id":"text-240","heading":"Text","content":"// Now set the cookie. This one&#39;s valid for the entire domain\nBiscuit biscuit = Nouveau Biscuit(&quot;key&quot;, &quot;value&quot;)\nchauffeur.gérer().addCookie(biscuit)"},{"id":"text-241","heading":"Text","content":"// And now output all the available cookies for the current URL\nEnsemble&lt;Biscuit&gt; allCookies = chauffeur.gérer().getCookies();\npour (Biscuit loadedCookie : allCookies) \n    Système.en dehors.imprimer(Chaîne.format(&quot;%s -&gt; %s&quot;, loadedCookie.getName(), loadedCookie.getValue()));"},{"id":"text-242","heading":"Text","content":"// You can delete cookies in 3 ways\n// By name\nchauffeur.gérer().deleteCookieNamed(&quot;CookieName&quot;)\n// By Cookie\nchauffeur.gérer().deleteCookie(loadedCookie)\n// Or all of them\nchauffeur.gérer().deleteAllCookies();"},{"id":"text-243","heading":"Text","content":"# Go to the correct domain\nchauffeur.obtenir(&quot;http://www.example.com&quot;)"},{"id":"text-244","heading":"Text","content":"# Now set the cookie. Here&#39;s one for the entire domain\n# the cookie name here is &#39;key&#39; and its value is &#39;value&#39;\nchauffeur.add_cookie(&#39;name&#39;:&#39;key&#39;, &#39;value&#39;:&#39;value&#39;, &#39;path&#39;:&#39;/&#39;)\n# additional keys that can be passed in are:\n# &#39;domain&#39; -&gt; String,\n# &#39;secure&#39; -&gt; Boolean,\n# &#39;expiry&#39; -&gt; Milliseconds since the Epoch it should expire."},{"id":"text-245","heading":"Text","content":"# And now output all the available cookies for the current URL\npour biscuit dans chauffeur.get_cookies():\n    impression &quot;% s    -&gt; % s&quot; % (biscuit[[[[&#39;name&#39;], biscuit[[[[&#39;value&#39;])"},{"id":"text-246","heading":"Text","content":"# You can delete cookies in 2 ways\n# By name\nchauffeur.delete_cookie(&quot;CookieName&quot;)\n# Or all of them\nchauffeur.delete_all_cookies()"},{"id":"text-247","heading":"Text","content":"# Go to the correct domain\nchauffeur.obtenir &quot;http://www.example.com&quot;"},{"id":"text-248","heading":"Text","content":"# Now set the cookie. Here&#39;s one for the entire domain\n# the cookie name here is &#39;key&#39; and its value is &#39;value&#39;\nchauffeur.gérer.add_cookie(:name =&gt; &#39;key&#39;, :value =&gt; &#39;value&#39;)\n# additional keys that can be passed in are:\n# :path =&gt; String, :secure -&gt; Boolean, :expires -&gt; Time, DateTime, or seconds since epoch"},{"id":"text-249","heading":"Text","content":"# And now output all the available cookies for the current URL\nchauffeur.gérer.all_cookies.chaque \n    met &quot;#biscuit[[[[:name]    =&gt; #biscuit[[[[:value]&quot;"},{"id":"text-250","heading":"Text","content":"# You can delete cookies in 2 ways\n# By name\nchauffeur.gérer.delete_cookie &quot;CookieName&quot;\n# Or all of them\nchauffeur.gérer.delete_all_cookies"},{"id":"text-251","heading":"Text","content":"# Go to the correct domain\n$driver-&gt;obtenir(&quot;http://www.example.com&quot;)"},{"id":"text-252","heading":"Text","content":"# Now set the cookie. Here&#39;s one for the entire domain\n# the cookie name here is &#39;key&#39; and its value is &#39;value&#39;\n$driver-&gt;add_cookie(&#39;key&#39;, &#39;value&#39;, &#39;/&#39;, &#39;example.com&#39;, 0)\n# additional required inputs are path and domain\n# the final input secure is an optional boolean"},{"id":"text-253","heading":"Text","content":"# And now output all the available cookies for the current URL\nmon $cookies_ref = $driver-&gt;get_all_cookies(); # Returns reference to AoH\npour $cookie_ref (@$cookies_ref) \n    printf &quot;%s =&gt; %sn&quot;, $cookie_ref-&gt;prénom, $cookie_ref-&gt;valeur;"},{"id":"text-254","heading":"Text","content":"# You can delete cookies in 2 ways\n# By name\n$driver-&gt;delete_cookie_named(&quot;key&quot;)\n# Or all of them\n$driver-&gt;delete_all_cookies();"},{"id":"text-255","heading":"Text","content":"# Go to the correct domain\ndriver.get(&#39;http://www.example.com&#39;);"},{"id":"text-256","heading":"Text","content":"# Now set the basic cookie. Here&#39;s one for the entire domain\n# the cookie name here is &#39;key&#39; and its value is &#39;value&#39;\ndriver.manage().addCookie(name: &#39;cookie-1&#39;, value: &#39;cookieValue&#39;);"},{"id":"text-257","heading":"Text","content":"# And now output all the available cookies for the current URL\ndriver.manage().getCookies().then( (loadedCookies) =&gt;\n    for (let cookie in loadedCookies) \n    console.log(&#39;printing Cookies loaded : &#39;+cookie);\n    \n    );\n# You can delete cookies in 2 ways\n# By name\ndriver.manage().deleteCookie(&#39;cookie-1&#39;);\n# Or all of them\ndriver.manage().deleteAllCookies();"},{"id":"text-258","heading":"Text","content":"Changing the User Agent\nThis is easy with the Firefox Driver:"},{"id":"text-259","heading":"Text","content":"FirefoxProfile profil = Nouveau FirefoxProfile();\nprofil.addAdditionalPreference(&quot;general.useragent.override&quot;, &quot;some UA string&quot;)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)"},{"id":"text-260","heading":"Text","content":"var profil = Nouveau FirefoxProfile();\nprofil.SetPreference(&quot;general.useragent.override&quot;, &quot;some UA string&quot;)\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)"},{"id":"text-261","heading":"Text","content":"profil = Sélénium::WebDriver::Firefox::Profil.Nouveau\nprofil[[[[&#39;general.useragent.override&#39;] = &quot;some UA string&quot;\nchauffeur = Sélénium::WebDriver.pour :firefox, :profile =&gt; profil"},{"id":"text-262","heading":"Text","content":"profil = webdriver.FirefoxProfile()\nprofil.set_preference(&quot;general.useragent.override&quot;, &quot;some UA string&quot;)\nchauffeur = webdriver.Firefox(profil)"},{"id":"text-263","heading":"Text","content":"utilisation Selenium::Remote::Driver::Firefox::Profile;\nmon $profile = Selenium::Remote::Driver::Firefox::Profile-&gt;Nouveau;\n$profile-&gt;set_preference(&#39;general.useragent.overide&#39; =&gt; &quot;some UA string&quot;)\nmon $driver = Selenium::Remote::Driver-&gt;Nouveau(&#39;firefox_profile&#39; =&gt; $profile)"},{"id":"text-264","heading":"Text","content":"Drag And Drop\nHere’s an example of using the Actions class to perform a drag and drop.\nNative events are required to be enabled."},{"id":"text-265","heading":"Text","content":"WebElement élément = chauffeur.findElement(Par.prénom(&quot;source&quot;));\nWebElement cible = chauffeur.findElement(Par.prénom(&quot;target&quot;));"},{"id":"text-266","heading":"Text","content":"(Nouveau actes(chauffeur)).dragAndDrop(élément, cible).effectuer();"},{"id":"text-267","heading":"Text","content":"IWebElement élément = chauffeur.FindElement(Par.prénom(&quot;source&quot;));\nIWebElement cible = chauffeur.FindElement(Par.prénom(&quot;target&quot;));\n(Nouveau actes(chauffeur)).DragAndDrop(élément, cible).Effectuer();"},{"id":"text-268","heading":"Text","content":"élément = chauffeur.find_element(:name =&gt; &#39;source&#39;)\ncible = chauffeur.find_element(:name =&gt; &#39;target&#39;)"},{"id":"text-269","heading":"Text","content":"chauffeur.action.drag_and_drop(élément, cible).effectuer"},{"id":"text-270","heading":"Text","content":"de selenium.webdriver.common.action_chains importation ActionChains\nélément = chauffeur.find_element_by_name(&quot;source&quot;)\ncible =  chauffeur.find_element_by_name(&quot;target&quot;)"},{"id":"text-271","heading":"Text","content":"ActionChains(chauffeur).drag_and_drop(élément, cible).effectuer()"},{"id":"text-272","heading":"Text","content":"Driver Specifics and Tradeoffs"},{"id":"text-273","heading":"Text","content":"Selenium-WebDriver’s Drivers\nWebDriver is the name of the key interface against which tests should be\nwritten, but there are several implementations. Ceux-ci inclus:"},{"id":"text-274","heading":"Text","content":"HtmlUnit Driver\nThis is currently the fastest and most lightweight implementation of WebDriver.\nAs the name suggests, this is based on HtmlUnit. HtmlUnit is a java based implementation\nof a WebBrowser without a GUI. For any language binding (other than java) the\nSelenium Server is required to use this driver."},{"id":"text-275","heading":"Text","content":"Usage"},{"id":"text-276","heading":"Text","content":"WebDriver chauffeur = Nouveau HtmlUnitDriver();"},{"id":"text-277","heading":"Text","content":"IWebDriver chauffeur = Nouveau RemoteWebDriver(Nouveau Uri(&quot;http://127.0.0.1:4444/wd/hub&quot;),\n                                        DesiredCapabilities.HtmlUnit());"},{"id":"text-278","heading":"Text","content":"chauffeur = webdriver.Remote(&quot;http://localhost:4444/wd/hub&quot;, webdriver.DesiredCapabilities.HTMLUNIT.copie())"},{"id":"text-279","heading":"Text","content":"chauffeur = Sélénium::WebDriver.pour :remote, :url =&gt; &quot;http://localhost:4444/wd/hub&quot;, :desired_capabilities =&gt; :htmlunit"},{"id":"text-280","heading":"Text","content":"mon $driver = Selenium::Remote::Driver-&gt;Nouveau(browser_name =&gt; &#39;htmlunit&#39;, remote_server_addr =&gt; &#39;localhost&#39;, Port =&gt; &#39;4444&#39;)"},{"id":"text-281","heading":"Text","content":"Avantages"},{"id":"text-282","heading":"Text","content":"Fastest implementation of WebDriver\nA pure Java solution and so it is platform independent.\nSupports JavaScript"},{"id":"text-283","heading":"Text","content":"Les inconvénients"},{"id":"text-284","heading":"Text","content":"Emulates other browsers’ JavaScript behaviour (see below)"},{"id":"text-285","heading":"Text","content":"JavaScript in the HtmlUnit Driver\nNone of the popular browsers uses the JavaScript engine used by HtmlUnit\n(Rhino). If you test JavaScript using HtmlUnit the results may differ\nsignificantly from those browsers.\nWhen we say “JavaScript” we actually mean “JavaScript and the DOM”. Although\nthe DOM is defined by the W3C each browser has its own quirks and differences\nin their implementation of the DOM and in how JavaScript interacts with it.\nHtmlUnit has an impressively complete implementation of the DOM and has good\nsupport for using JavaScript, but it is no different from any other\nbrowser: it has its own quirks and differences from both the W3C standard and\nthe DOM implementations of the major browsers, despite its ability to mimic\nother browsers.\nWith WebDriver, we had to make a choice; do we enable HtmlUnit’s JavaScript\ncapabilities and run the risk of teams running into problems that only manifest\nthemselves there, or do we leave JavaScript disabled, knowing that there are\nmore and more sites that rely on JavaScript? We took the conservative approach,\nand by default have disabled support when we use HtmlUnit. With each release of\nboth WebDriver and HtmlUnit, we reassess this decision: we hope to enable\nJavaScript by default on the HtmlUnit at some point."},{"id":"text-286","heading":"Text","content":"Enabling JavaScript\nIf you can’t wait, enabling JavaScript support is very easy:"},{"id":"text-287","heading":"Text","content":"HtmlUnitDriver chauffeur = Nouveau HtmlUnitDriver(vrai)"},{"id":"text-288","heading":"Text","content":"WebDriver chauffeur = Nouveau RemoteWebDriver(Nouveau Uri(&quot;http://127.0.0.1:4444/wd/hub&quot;),\n                       DesiredCapabilities.HtmlUnitWithJavaScript());"},{"id":"text-289","heading":"Text","content":"casquettes = Sélénium::WebDriver::Remote::Les capacités.htmlunit(:javascript_enabled =&gt; vrai)\nchauffeur = Sélénium::WebDriver.pour :remote, :url =&gt; &quot;http://localhost:4444/wd/hub&quot;, :desired_capabilities =&gt; casquettes"},{"id":"text-290","heading":"Text","content":"chauffeur = webdriver.Remote(&quot;http://localhost:4444/wd/hub&quot;, webdriver.DesiredCapabilities.HTMLUNITWITHJS)"},{"id":"text-291","heading":"Text","content":"$driver = Nouveau Selenium::Remote::Driver( browser_name=&gt;&#39;firefox&#39;, Port=&gt; 4444, version=&gt;&#39;&#39;, Plate-forme=&gt;&#39;LINUX&#39;, javascript=&gt;1, auto_close=&gt;1)"},{"id":"text-292","heading":"Text","content":"This will cause the HtmlUnit Driver to emulate Firefox 3.6’s JavaScript\nhandling by default."},{"id":"text-293","heading":"Text","content":"Firefox Driver\nControls the Firefox browser using a Firefox plugin.\nThe Firefox Profile that is used is stripped down from what is installed on the\nmachine to only include the Selenium WebDriver.xpi (plugin). A few settings are\nalso changed by default (see the source to see which ones)\nFirefox Driver is capable of being run and is tested on Windows, Mac, Linux.\nCurrently on versions 3.6, 10, latest &#8211; 1, latest"},{"id":"text-294","heading":"Text","content":"Usage"},{"id":"text-295","heading":"Text","content":"WebDriver chauffeur = Nouveau FirefoxDriver();"},{"id":"text-296","heading":"Text","content":"IWebDriver chauffeur = Nouveau FirefoxDriver();"},{"id":"text-297","heading":"Text","content":"chauffeur = webdriver.Firefox()"},{"id":"text-298","heading":"Text","content":"chauffeur = Sélénium::WebDriver.pour :firefox"},{"id":"text-299","heading":"Text","content":"mon $driver = Selenium::Remote::Driver-&gt;Nouveau;"},{"id":"text-300","heading":"Text","content":"Modifying the Firefox Profile\nSuppose that you wanted to modify the user agent string (as above), but you’ve\ngot a tricked out Firefox profile that contains dozens of useful extensions.\nThere are two ways to obtain this profile. Assuming that the profile has been\ncreated using Firefox’s profile manager (firefox -ProfileManager):"},{"id":"text-301","heading":"Text","content":"ProfilesIni allProfiles = Nouveau ProfilesIni();\nFirefoxProfile profil = allProfiles.getProfile(&quot;WebDriver&quot;)\nprofil.setPreferences(&quot;foo.bar&quot;, 23)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)"},{"id":"text-302","heading":"Text","content":"var profileManager = Nouveau FirefoxProfileManager();\nFirefoxProfile profil = profileManager.GetProfile(&quot;WebDriver&quot;)\nprofil.SetPreference(&quot;foo.bar&quot;, 23)\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)"},{"id":"text-303","heading":"Text","content":"Alternatively, if the profile isn’t already registered with Firefox:"},{"id":"text-304","heading":"Text","content":"File profileDir = Nouveau File(&quot;path/to/top/level/of/profile&quot;)\nFirefoxProfile profil = Nouveau FirefoxProfile(profileDir)\nprofil.addAdditionalPreferences(extraPrefs)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)"},{"id":"text-305","heading":"Text","content":"FirefoxProfile profil = Nouveau FirefoxProfile(&quot;path/to/top/level/of/profile&quot;)\nprofil.SetPreference(&quot;extra&quot;, &quot;pref&quot;)\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)"},{"id":"text-306","heading":"Text","content":"As we develop features in the Firefox Driver, we expose the ability to use them.\nFor example, until we feel native events are stable on Firefox for Linux, they\nare disabled by default. To enable them:"},{"id":"text-307","heading":"Text","content":"FirefoxProfile profil = Nouveau FirefoxProfile();\nprofil.setEnableNativeEvents(vrai)\nWebDriver chauffeur = Nouveau FirefoxDriver(profil)"},{"id":"text-308","heading":"Text","content":"var profil = Nouveau FirefoxProfile EnableNativeEvents = vrai;\nIWebDriver chauffeur = Nouveau FirefoxDriver(profil)"},{"id":"text-309","heading":"Text","content":"profil = webdriver.FirefoxProfile()\nprofil.native_events_enabled = Vrai\nchauffeur = webdriver.Firefox(profil)"},{"id":"text-310","heading":"Text","content":"profil = Sélénium::WebDriver::Firefox::Profil.Nouveau\nprofil.native_events = vrai\nchauffeur = Sélénium::WebDriver.pour :firefox, :profile =&gt; profil"},{"id":"text-311","heading":"Text","content":"Internet Explorer Driver\nThe InternetExplorerDriver is a standalone server which implements WebDriver’s wire protocol. This driver has been tested with IE 7, 8, 9, 10, and 11 on appropriate combinations of Vista, Windows 7, Windows 8, and Windows 8.1. As of 15 April 2014, IE 6 is no longer supported.\nThe driver supports running 32-bit and 64-bit versions of the browser. The choice of how to determine which “bit-ness” to use in launching the browser depends on which version of the IEDriverServer.exe is launched. If the 32-bit version of IEDriverServer.exe is launched, the 32-bit version of IE will be launched. Similarly, if the 64-bit version of IEDriverServer.exe is launched, the 64-bit version of IE will be launched."},{"id":"text-312","heading":"Text","content":"Usage"},{"id":"text-313","heading":"Text","content":"WebDriver chauffeur = Nouveau InternetExplorerDriver();"},{"id":"text-314","heading":"Text","content":"IWebDriver chauffeur = Nouveau InternetExlorerDriver();"},{"id":"text-315","heading":"Text","content":"chauffeur = Sélénium::WebDriver.pour :ie"},{"id":"text-316","heading":"Text","content":"mon $driver = Selenium::Remote::Driver-&gt;Nouveau(browser_name =&gt; &#39;internet explorer&#39;)"},{"id":"text-317","heading":"Text","content":"Avantages"},{"id":"text-318","heading":"Text","content":"Runs in a real browser and supports Javascript"},{"id":"text-319","heading":"Text","content":"Les inconvénients"},{"id":"text-320","heading":"Text","content":"Obviously the InternetExplorerDriver will only work on Windows!\nComparatively slow (though still pretty snappy!)"},{"id":"text-321","heading":"Text","content":"ChromeDriver\nChromeDriver is maintained / supported by the Chromium\nproject iteslf. WebDriver works with Chrome through the chromedriver binary (found on the chromium\nproject’s download page). You need to have both chromedriver and a version of chrome browser installed.\nchromedriver needs to be placed somewhere on your system’s path in order for WebDriver to automatically\ndiscover it. The Chrome browser itself is discovered by chromedriver in the default installation path.\nThese both can be overridden by environment variables. Please refer to the wiki\nfor more information."},{"id":"text-322","heading":"Text","content":"Usage"},{"id":"text-323","heading":"Text","content":"WebDriver chauffeur = Nouveau ChromeDriver();"},{"id":"text-324","heading":"Text","content":"IWebDriver chauffeur = Nouveau ChromeDriver();"},{"id":"text-325","heading":"Text","content":"chauffeur = webdriver.Chrome()"},{"id":"text-326","heading":"Text","content":"chauffeur = Sélénium::WebDriver.pour :chrome"},{"id":"text-327","heading":"Text","content":"mon $driver = Selenium::Remote::Driver-&gt;Nouveau(browser_name =&gt; &#39;chrome&#39;)"},{"id":"text-328","heading":"Text","content":"Avantages"},{"id":"text-329","heading":"Text","content":"Runs in a real browser and supports JavaScript\nBecause Chrome is a Webkit-based browser, the ChromeDriver may allow you to\nverify that your site works in Safari. Note that since Chrome uses its own V8\nJavaScript engine rather than Safari’s Nitro engine, JavaScript execution may\ndiffer."},{"id":"text-330","heading":"Text","content":"Alternative Back-Ends: Mixing WebDriver and RC Technologies"},{"id":"text-331","heading":"Text","content":"WebDriver-Backed Selenium-RC\nThe Java version of WebDriver provides an implementation of the Selenium-RC API.  These means that\nyou can use the underlying WebDriver technology using the Selenium-RC API.  This is primarily\nprovided for backwards compatibility.  It allows those who have existing test suites using the\nSelenium-RC API to use WebDriver under the covers.  It’s provided to help ease the migration path\nto Selenium-WebDriver.  Also, this allows one to use both APIs, side-by-side, in the same test code.\nSelenium-WebDriver is used like this:"},{"id":"text-332","heading":"Text","content":"// You may use any WebDriver implementation. Firefox is used here as an example\nWebDriver chauffeur = Nouveau FirefoxDriver();"},{"id":"text-333","heading":"Text","content":"// A &quot;base url&quot;, used by selenium to resolve relative URLs\n Chaîne baseUrl = &quot;http://www.google.com&quot;;"},{"id":"text-334","heading":"Text","content":"// Create the Selenium implementation\nSélénium sélénium = Nouveau WebDriverBackedSelenium(chauffeur, baseUrl)"},{"id":"text-335","heading":"Text","content":"// Perform actions with selenium"},{"id":"text-336","heading":"Text","content":"sélénium.ouvrir(&quot;http://www.google.com&quot;)\nsélénium.type(&quot;name=q&quot;, &quot;cheese&quot;)\nsélénium.Cliquez sur(&quot;name=btnG&quot;)"},{"id":"text-337","heading":"Text","content":"// Get the underlying WebDriver implementation back. This will refer to the\n// same WebDriver instance as the &quot;driver&quot; variable above.\nWebDriver driverInstance = ((WebDriverBackedSelenium) sélénium).getWrappedDriver();"},{"id":"text-338","heading":"Text","content":"//Finally, close the browser. Call stop on the WebDriverBackedSelenium instance\n//instead of calling driver.quit(). Otherwise, the JVM will continue running after\n//the browser has been closed.\nsélénium.Arrêtez();"},{"id":"text-339","heading":"Text","content":"Avantages"},{"id":"text-340","heading":"Text","content":"Allows for the WebDriver and Selenium APIs to live side-by-side\nProvides a simple mechanism for a managed migration from the Selenium RC API\nto WebDriver’s\nDoes not require the standalone Selenium RC server to be run"},{"id":"text-341","heading":"Text","content":"Les inconvénients"},{"id":"text-342","heading":"Text","content":"Does not implement every method\nMore advanced Selenium usage (using “browserbot” or other built-in JavaScript\nmethods from Selenium Core) may not work\nSome methods may be slower due to underlying implementation differences"},{"id":"text-343","heading":"Text","content":"Backing WebDriver with Selenium\nWebDriver doesn’t support as many browsers as Selenium RC does, so in order to\nprovide that support while still using the WebDriver API, you can make use of\nla SeleneseCommandExecutor\nSafari is supported in this way with the following code (be sure to disable\npop-up blocking):"},{"id":"text-344","heading":"Text","content":"DesiredCapabilities capacités = Nouveau DesiredCapabilities();\ncapacités.setBrowserName(&quot;safari&quot;)\nCommandExecutor executor = Nouveau SeleneseCommandExecutor(Nouveau URL(&quot;http://localhost:4444/&quot;), Nouveau URL(&quot;http://www.google.com/&quot;), capacités)\nWebDriver chauffeur = Nouveau RemoteWebDriver(executor, capacités)"},{"id":"text-345","heading":"Text","content":"There are currently some major limitations with this approach, notably that\nfindElements doesn’t work as expected. Also, because we’re using Selenium Core\nfor the heavy lifting of driving the browser, you are limited by the JavaScript\nsandbox."},{"id":"text-346","heading":"Text","content":"Running Standalone Selenium Server for use with RemoteDrivers\nFrom Selenium’s Download page download selenium-server-standalone-.jar and optionally IEDriverServer. If you plan to work with Chrome, download it from Google Code.\nUnpack IEDriverServer and/or chromedriver and put them in a directory which is on the $PATH / %PATH% &#8211; the Selenium Server should then be able to handle requests for IE / Chrome without additional modifications.\nStart the server on the command line with"},{"id":"text-347","heading":"Text","content":"java -jar /selenium-server-standalone-.pot"},{"id":"text-348","heading":"Text","content":"If you want to use native events functionality, indicate this on the command line with the option"},{"id":"text-349","heading":"Text","content":"-Dwebdriver.enable.native.events=1"},{"id":"text-350","heading":"Text","content":"For other command line options, execute"},{"id":"text-351","heading":"Text","content":"java -jar /selenium-server-standalone-.jar -help"},{"id":"text-352","heading":"Text","content":"In order to function properly, the following ports should be allowed incoming TCP connections: 4444, 7054-5 (or twice as many ports as the number of concurrent instances you plan to run). Under Windows, you may need to unblock the applications as well."},{"id":"text-353","heading":"Text","content":"Ressources supplémentaires\nYou can find further resources for WebDriver\nin WebDriver’s wiki\nOf course, don’t hesitate to do an internet search on any Selenium topic, including\nSelenium-WebDriver’s drivers.  There are quite a few blogs on Selenium along with numerous posts\non various user forums.  Additionally the Selenium User’s Group is a great resource.\nhttp://groups.google.com/group/selenium-users"},{"id":"text-354","heading":"Text","content":"Prochaines étapes\nThis chapter has simply been a high level walkthrough of WebDriver and some of its key\ncapabilities.  Once getting familiar with the Selenium-WebDriver API you will then want to learn\nhow to build test suites for maintainability, extensibility, and reduced fragility when features of\nthe AUT frequently change.  The approach most Selenium experts are now recommending is to design\nyour test code using the Page Object Design Pattern along with possibly a Page Factory.\nSelenium-WebDriver provides support for this by supplying a PageFactory class in Java and C#.\nThis is presented, along with other advanced topics, in the\nChapitre suivant. Also, for high-level description of this\ntechnique, you may want to look at the\nTest Design Considerations chapter. Both of these\nchapters present techniques for writing more maintainable tests by making your test code more\nmodular."},{"id":"text-355","heading":"Text","content":"Click to rate this post!\n                                   \n                               [Total: 0  Average: 0]"}],"media":{"primary_image":""},"relations":[{"rel":"canonical","href":"https://tutos-gameserver.fr/2019/05/04/selenium-webdriver-documentation-selenium-serveur-dimpression/"},{"rel":"alternate","href":"https://tutos-gameserver.fr/2019/05/04/selenium-webdriver-documentation-selenium-serveur-dimpression/llm","type":"text/html"},{"rel":"alternate","href":"https://tutos-gameserver.fr/2019/05/04/selenium-webdriver-documentation-selenium-serveur-dimpression/llm.json","type":"application/json"},{"rel":"llm-manifest","href":"https://tutos-gameserver.fr/llm-endpoints-manifest.json","type":"application/json"}],"http_headers":{"X-LLM-Friendly":"1","X-LLM-Schema":"1.1.0","Content-Security-Policy":"default-src 'none'; img-src * data:; style-src 'unsafe-inline'"},"license":"CC BY-ND 4.0","attribution_required":true,"allow_cors":false}