2017-02-25 2 views
0

cas de test de réseau Sélénium échoué en mode navigateur sans tête necas de test du navigateur sans tête a échoué - grille selemium

mode Navigateur normal [Succès Test]

  • sélénium se serveur seul: 3.0.1
  • Firefox: 38.0.1
  • ip: 192.168.1.40

Navigateur Headless mode [Echec du test]

  • sélénium support serveur autonome: 3.0.1
  • Firefox: 38,0
  • ip: 172.18.0.60

je lance le navigateur sans tête comme ci-dessous

xvfb-exécuter java -Dwebdriver.firefox.marionette = "/ tmp/geckodriver" -Dwebdriver.firefo x.bin = "/ tmp/firefox/firefox" jar sélénium serveur autonome-3.0.1.jar -role WebDriver -hub http://192.168.1.106:4444/grid/register -port 5566 -host 172.18.0.60

essai Code de cas:

package example; 

import org.junit.Assert; 
import org.openqa.selenium.*; 
import org.openqa.selenium.remote.RemoteWebDriver; 
import org.openqa.selenium.remote.DesiredCapabilities; 
import org.testng.annotations.AfterTest; 
import org.testng.annotations.BeforeTest; 
import org.testng.annotations.Parameters; 
import org.testng.annotations.Test; 

import java.net.URL; 
import java.util.concurrent.TimeUnit; 
import java.net.MalformedURLException; 

public class NewTest 
{ 
    public WebDriver driver; 
    public String URL, Node; 
    private JavascriptExecutor jse; 
    private String baseUrl; 

    protected ThreadLocal<RemoteWebDriver> threadDriver = null; 

    @Parameters({"browser","url"}) 
    @BeforeTest 
    public void launchapp(String browser,String url) throws MalformedURLException 
    { 
     baseUrl = "http://myhost"; 

     if (browser.equalsIgnoreCase("firefox")) 
     { 
     System.out.println(" Executing on FireFox"); 
     String Node = url; 
     DesiredCapabilities cap = DesiredCapabilities.firefox(); 
     cap.setBrowserName("firefox"); 

     driver = new RemoteWebDriver(new URL(Node), cap);   
     // Puts an Implicit wait, Will wait for 10 seconds before throwing exception 
     driver.manage().timeouts().implicitlyWait(50, TimeUnit.SECONDS); 

     // Launch website 
     driver.navigate().to(baseUrl); 
     driver.manage().window().maximize(); 
     }   
     else 
     { 
     throw new IllegalArgumentException("The Browser Type is Undefined"); 
     } 

     jse = (JavascriptExecutor)driver; 
    } 

    @Test 
    public void functionalityTest() throws InterruptedException 
    {  
     driver.findElement(By.linkText("Sign In")).click(); 
     driver.findElement(By.id("email")).clear(); 
     driver.findElement(By.id("email")).sendKeys("[email protected]"); 
     driver.findElement(By.id("pass")).clear(); 
     driver.findElement(By.id("pass")).sendKeys("xxxxxx"); 
     driver.findElement(By.id("send2")).click();  
     jse.executeScript("scroll(0, 250);"); 
     driver.findElement(By.cssSelector(".customerlink a")).click(); 
     Thread.sleep(1000); 
     driver.findElement(By.linkText("My Account")).click();  
     Thread.sleep(2000); 
     jse.executeScript("scroll(0, 250);"); 
     Thread.sleep(1000); 
     jse.executeScript("scroll(0, -250);"); 
     Thread.sleep(2000); 
     driver.findElement(By.cssSelector(".customerlink a")).click(); 
     Thread.sleep(1000); 
     driver.findElement(By.linkText("Sign Out")).click(); 
     Thread.sleep(2000); 
    } 

    @AfterTest 
    public void closeBrowser() 
    { 
     driver.quit(); 
    } 
} 

Je suis exception dans toute première ligne de mode brwoser sans tête

07:16:53.571 INFO - Executing: [new session: Capabilities [{marionette=true, browserName=firefox, version=, platform=ANY}]]) 
07:16:53.580 INFO - Creating a new session for Capabilities [{marionette=true, browserName=firefox, version=, platform=ANY}] 
07:17:00.268 INFO - Attempting bi-dialect session, assuming Postel's Law holds true on the remote end 
07:17:02.648 INFO - Detected dialect: OSS 
07:17:02.665 INFO - Done: [new session: Capabilities [{marionette=true, [email protected]0c, browserName=firefox, moz:[email protected]0c, version=, platform=ANY}]] 
07:17:02.701 INFO - Executing: [implicit wait: 50000]) 
07:17:02.717 INFO - Done: [implicit wait: 50000] 
07:17:02.724 INFO - Executing: [get: http://myhost]) 
07:18:03.564 INFO - Done: [get: http://myhost] 
07:18:03.570 INFO - Executing: [maximise window]) 
07:18:03.580 INFO - Done: [maximise window] 
07:18:03.593 INFO - Executing: [find element: By.linkText: Sign In]) 
07:18:53.917 WARN - Exception thrown 
org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"link text","selector":"Sign In"} 

comme

L'état d'erreur clairement incapable de localiser l'élément, mais comment il a fonctionné en mode normal?

Existe-t-il une restriction dans le code pour utiliser le mode navigateur sans écran?

+0

Puis-je savoir où dans ce qui précède, vous utilisez le concept de "navigateur sans tête"?Pour autant que je sache, le navigateur sans tête est implémenté dans "HtmlUnitDriver" et peut être NodeJSDriver (ce que je n'ai pas encore essayé). Est-ce que je manque un concept ici? – Uday

+0

mon pote, moi aussi nouveau! Je crois que le mode sans tête est exécuté test de sélénium sans interface utilisateur du navigateur. Mon navigateur fonctionne sur xvfb au lieu du mode UI, donc je crois que c'est le mode sans tête. pour votre référence facile http://agiletesting.blogspot.in/2016/01/running-selenium-webdriver-tests-using.html –

+0

On dirait que ce xvfb fonctionne dans un environnement Linux/Ubuntu et non sous Windows. Found xnest est aussi pour Linux/Ubuntu env. Trouvé ce lien 'http://stackoverflow.com/questions/944086/is-there-anything-like-xvfb-or-xnest-for-windows' pour la version de Windows. – Uday

Répondre

0

Enfin trouvé, navigateur Headless ne tient pas compte de driver.manage().window().maximize(); donc je définir la taille de l'écran via la commande xvfb-run

-s "-Screen 0, 1920x1080x24"

Exemple:

xvfb terme -s "-Screen 0, 1920x1080x24" java -Dwebdriver.firefox.marionette = "/ tmp/geckodriver" -Dwebdriver.firefox.bin = "/ tmp/firefox/firefox" sélénium-serveur jar -s tandalone-3.0.1.jar -role WebDriver -hub http://192.168.1.106:4444/grid/register -port 5566 -host 172.18.0.60

Info: J'utilise bootstrap si visible de l'élément à modifier selon la screensize. Donc, il va jeter élément non trouvé exeception