2016-08-15 1 views
0

Ich möchte einen automatischen Test schreiben, um die Rechtschreibung in den Webseiten zu prüfen, die API des Webservice verwendend und den Wörter, die für das folgende Printscreening als falsch erkannt werden, um eine Datei als Bugreport zu prüfen.Wie man MARK.JS (oder irgendein Einstecken) mit WEBDRIVER durch JAVA benutzt, um alle Vorkommen des spezifizierten Wortes in Webseite zu markieren

Im Web suchen habe ich verstanden, dass die einzige Möglichkeit, ein separates Wort zu markieren, JavaScript über JavaScriptExecutor verwenden.

Ich habe festgestellt, wie Sie Webelemente hervorheben, die falsche Wörter enthalten, aber keine separate Worthervorhebung ausführen können.

So, nachdem einige Informationen zu sammeln i nächsten Schritte gemacht haben:

  • hochgeladen mark.js Plugin auf Github
  • legte die externe Js in das DOM
  • Set String mit Wort
  • genannt mark.js auf hTML-Textkörper der Seite:

    WebDriver driver = new FirefoxDriver(); 
    driver.manage().window().maximize(); 
    
    driver.get("http://stackoverflow.com/questions/16251505/how-to-highlight-all-text-occurrences-in-a-html-page-with-javascript"); 
    
    ((JavascriptExecutor) driver) 
    .executeScript("var addscript=window.document.createElement('script');addscript.type='text/javascript';addscript.src='http://github.com/my3tahk/codekeep/blob/master/mark.min.js';document.getElementsByTagName('body')[0].appendChild(addscript);"); 
    
    ((JavascriptExecutor) driver) 
    .executeScript("return typeof(somefunc)").toString().equals("function"); 
    
    String word = "text"; 
    
        ((JavascriptExecutor) driver) 
        .executeScript("var instance = new Mark(document.querySelector('body.context'));instance.mark('"+ word +"', {'element': 'span','className': 'highlight'});"); 
    

Konsole zurück:

Exception in thread "main" org.openqa.selenium.WebDriverException: Mark is not defined

Meine Frage: Wie richtig mark.js verwenden (oder ein anderes vorgeschlagenen Stecker in) in diesem Fall.

S.S .: Aufgrund meiner Neulinge, geben Sie bitte eine detaillierte Beschreibung mit vollständigen Erklärungen.

+0

ich mit Java nicht vertraut bin, aber scheint wie Zeichen .js wurde nicht geladen. GitHub antwortet mit falschen Headern, möglicherweise haben Sie Erfolg mit einem CDN wie [this] (https://cdn.jsdelivr.net/mark.js/7.0.2/mark.min.js). – dude

+0

@dude, danke für Ihren Rat. Das Problem bleibt, aber jetzt gibt die Konsole einen anderen Fehler zurück: 'Ausnahme im Thread" main "org.openqa.selenium.WebDriverException: kann null in Objekt nicht konvertieren – my3tahk

+0

Wenn dies durch mark.js verursacht wurde, dann entweder Ihren Kontext oder Ihre Optionen sind falsch. Gibt es 'body.context'? Außerdem sollte Ihr Aufruf von instance.mark wie folgt aussehen: instance.mark (word) 'anstelle von' instance.mark ('"+ word +"'), aber beachten Sie, dass 'word' in JavaScript definiert sein muss, nicht nur in Ihr Java Script – dude

Antwort

0
  1. ich habe cdn.jsdelivr.net statt .js auf github veröffentlicht. (Thx to @dude)

  2. document.querySelec‌​torAll('body') muss statt document.querySelec‌​tor('body.context')

das Ergebnis arbeitet Code verwendet werden:

WebDriver driver = new FirefoxDriver(); 
driver.manage().window().maximize(); 

driver.get("http://stackoverflow.com/questions/16251505/how-to-highlight-all-text-occurrences-in-a-html-page-with-javascript"); 

((JavascriptExecutor) driver) 
    .executeScript("var addscript=window.document.createElement('script');addscript.type='text/javascript';addscript.src='https://cdn.jsdelivr.net/mark.js/7.0.2/mark.min.js';document.getElementsByTagName('body')[0].appendChild(addscript);"); 

((JavascriptExecutor) driver) 
.executeScript("return typeof(somefunc)").toString().equals("function"); 

String word = "text"; 

     ((JavascriptExecutor) driver) 
     .executeScript("var instance = new Mark(document.querySelectorAll('body'));instance.mark('"+ word +"', {'element': 'span','className': 'highlight'});"); 
Verwandte Themen