Sélénium - pilote.getPageSource() diffère de la source considérée à partir du navigateur
Je suis en train d'essayer de capturer le code source à partir de l'URL spécifiée dans un fichier HTML à l'aide de sélénium, mais je ne sais pas pourquoi, je ne reçois pas la source exacte de code qui nous voir à partir du navigateur.
Ci-dessous mon code java pour capter la source dans un fichier HTML
private static void getHTMLSourceFromURL(String url, String fileName) {
WebDriver driver = new FirefoxDriver();
driver.get(url);
try {
Thread.sleep(5000); //the page gets loaded completely
List<String> pageSource = new ArrayList<String>(Arrays.asList(driver.getPageSource().split("\n")));
writeTextToFile(pageSource, originalFile);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("quitting webdriver");
driver.quit();
}
/**
* creates file with fileName and writes the content
*
* @param content
* @param fileName
*/
private static void writeTextToFile(List<String> content, String fileName) {
PrintWriter pw = null;
String outputFolder = ".";
File output = null;
try {
File dir = new File(outputFolder + '/' + "HTML Sources");
if (!dir.exists()) {
boolean success = dir.mkdirs();
if (success == false) {
try {
throw new Exception(dir + " could not be created");
} catch (Exception e) {
e.printStackTrace();
}
}
}
output = new File(dir + "/" + fileName);
if (!output.exists()) {
try {
output.createNewFile();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
pw = new PrintWriter(new FileWriter(output, true));
for (String line : content) {
pw.print(line);
pw.print("\n");
}
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
pw.close();
}
}
Quelqu'un peut jeter un peu de lumière dans ce pourquoi cela se produit? Comment WebDriver affiche la page? Et comment le navigateur affiche la source?
Alors, quelles sont les différences?
OriginalL'auteur roger_that | 2013-10-14
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs endroits où vous pouvez obtenir à partir de la source.Vous pouvez essayer de
et voir ce qui arrive.
Généralement vous n'avez pas besoin d'attendre que la page se charge.Le sélénium fait automatiquement,sauf si vous avez des sections séparées de Javascript/Ajax.
Vous voudrez peut-être ajouter quelles sont les différences que vous voyez, afin que nous puissions comprendre ce que tu veux vraiment dire.
Webdriver ne rend pas la page sur son propre,il a juste le rend comme le navigateur voit.
String pageSource=driver.findElement(By.tagName("body")).getText();
donne juste le corps du texte, mais j'ai besoin du code HTML complète avec des étiquettes et tout, donc je suppose que ce n'est pas l'exigence.Ensuite, vous devez ajouter quelles sont les différences que vous voyez,nous ne serons pas en mesure de vous donner une solution sans que.
Je suis incapable de trouver le moyen de vous montrer la différence. Je suis l'aide de Java-Diff-Util pour comparer les deux fichiers HTML, on a créé à l'aide de code ci-dessus et l'autre manuellement par l'enregistrement de navigateur et copier les Deltas dans un difference.txt fichier. Les résultats sont assez bizarre et maladroit de montrer ici. Que faire ?
Il peut y avoir plusieurs endroits où les changements peuvent être.J'ai connu des situations où le droit cliquez sur afficher la source était bien et l'obtention de la source à l'aide du pilote.getPageSource() a été ajouté quelques "extra" - " dans la page et j'ai dû les remplacer afin d'obtenir la bonne source.Votre cas d'utilisation peuvent être différentes.Vous devez manuellement les comparer afin de savoir quelles sont les différences et de travailler sur elle.Mais, qu'est-ce que le test fonctionnel que vous êtes la réalisation en faisant cela??
Mon idée ou de l'exigence était de comparer la page web avec une version plus ancienne afin de déceler d'éventuels changements dans la page. Pas de problème, il y a une bibliothèque à faire DaisyDiff. J'ai été prise en cristal clair diff résultats sous forme de documents HTML quand j'ai essayé de saisir manuellement le code et il se nourrissait de la comparaison de code. Mais, quand j'ai essayé de créer la source HTML fichier automatiquement, en dehors de l'INTERFACE utilisateur, beaucoup de texte html était également venue dans le résultat, donc la pensée qui WebDriver pourrait être la copie de code supplémentaire. Cependant, je me sens
<
ont été codées comme<
en raison de laquelle il n'a pas été rendu en tant que balise HTMLOriginalL'auteur Madusudanan
J'ai rencontré le même problème. J'utilise ces code pour le résoudre:
En utilisant du code JavaScript pour obtenir la propriété innerHTML, cela fonctionne enfin, et la question des marques disparu.
OriginalL'auteur mikemelon
La "source" de code que vous obtenez à partir de Sélénium semble pas être la source. Il semble être le HTML pour les DOM actuel. Le code source que vous voyez dans le navigateur est le HTML est donnée par le serveur, avant toute modification dynamique faite par JavaScript. Si le DOM changements à tous, le navigateur, le code source n'est pas de refléter ces changements, mais le Sélénium permettra d'. Si vous voulez voir les DOM dans un navigateur, vous pouvez utiliser les outils de développement, pas le code source.
OriginalL'auteur Indigenuity