2017-11-28 5 views
0

Meine Skripts schlagen nur fehl, wenn der Headless-Modus aktiviert ist. Bitte schlage mir vor, wie ich beim Codieren alles sehen sollte.Leistungsproblem mit Headless Chrome

  1. Die meisten meiner Skripts sind aufgrund von TimedOut fehlgeschlagen.
  2. Gibt es irgendetwas, wo ich gezielt nach Locators suchen sollte? Ich glaube, dass css mir in diesem Fall nicht helfen wird. Gäbe es etwas anderes mit Locators?
  3. Im Continuous Integration Server ist die Ausführung sehr langsam. Die Limits von Timed_Out Sekunden sind auf 50 festgelegt. Dies hat bei mir und sogar bei 100 nicht funktioniert. Bitte schlage mir vor, wie ich damit umgehen soll, wenn ich nur TimeOut bis zu 100 Sekunden benutzen darf und die Exception erfüllt Dies.

Hier sind einige Ausnahmen, die ich nur erhalten, wenn ich ohne Kopf zu aktivieren,

1. WebDriverException: unknown error: Element <input type="radio" class="wizard-input" name="5a68a4c173bb-TOTAL-1" id="5a68a4c173bb-TOTAL-1" value="1"> is not clickable at point (496, 551). Other element would receive the click: <div class="navigation-bar">...</div> 

Versuchte Wartezustand zu übernehmen und auch gescrollt und klicken Sie auf.

2. TimeoutException: Expected condition failed: waiting for element to be clickable: By.cssSelector: div.icon.icon-add.add-contact-button (tried for 50 second(s) with 500 MILLISECONDS interval) 

Versucht, die von Marcel vorgeschlagenen Bedingungen anzuwenden. Wie gesagt, es sogar 100 Sekunden

übersteigt Hier einige Beispiele für meinen Code sind,

public void clickForwardButton(){ 
    WaitTillElementToBeClickable("xpath", LoginData.Forward); 
    ScrollAndClickOnElement("xpath", LoginData.Forward); 
} //The error seems to be like it wont scroll properly and hence I receive element not found exception 

protected void WaitTillElementToBeClickable(String locatorType, String locatorValue) { 
try { 
    WebDriverWait wait = new WebDriverWait(driver, TIME_OUT_IN_SECONDS); 
    if (locatorType.equalsIgnoreCase("cssSelector")) { 
    wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(locatorValue))); 
    } else if (locatorType.equalsIgnoreCase("xpath")) { 
    wait.until(ExpectedConditions.elementToBeClickable(By.xpath(locatorValue))); 
    } else if (locatorType.equalsIgnoreCase("id")) { 
    wait.until(ExpectedConditions.elementToBeClickable(By.id(locatorValue))); 
    } 
} catch (Exception e) { 
    logger.error("Webdriver Locator Error" + e); 
} 
} 
+0

Können Sie Ihren Code-Block teilen, der zusammen mit der relevanten HTML- & Fehler-Stack-Ablaufverfolgung fehlschlägt? – DebanjanB

+0

@Debanjan - Ich habe meine Frage mit einigen Beispielen aktualisiert. Bitte prüfe. – Roja

+1

Danke Debanjan Ich bin jetzt klar genug, wie ich meinen Code beheben kann, indem ich den gegebenen Link verstehe. – Roja

Antwort

1

Wenn Sie nicht WebDriverWait verwenden, geben, dass ein Versuch

int seconds = 5; 
WebDriverWait wait = new WebDriverWait(driver, seconds); 
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("yourID"))); 

Sie haben OpenQA.Selenium.Support.UI zu importieren in der Lage sein, WebDriverWait zu verwenden.

bearbeiten

Da die WebDriverWait Methode, versucht nicht, eine Lösung bieten ein zusätzliches Argument zu Ihrem ChromeOptions Hinzufügen der Fenstergröße einzustellen. Da die standardmäßige Größe des Headless-Fensters wahrscheinlich viel kleiner ist als die Größe ohne Headless-Fenster, ist es einen Versuch wert. Ein weiterer Vorteil des Einstellens einer größeren Fenstergröße ist das Verringern des Scrollens.

ChromeOptions options = new ChromeOptions(); 
options.addArgument("headless"); 
options.addArgument("window-size=1920,1080"); 

// or 

options.addArguments("headless", "window-size=1920,1080"); 
+0

Danke marcel. Ich habe darüber nachgedacht. Im Server für kontinuierliche Integration ist die Ausführung sehr langsam. Die Limits von Timed_Out Sekunden sind auf 50 festgelegt. Dies hat bei mir und sogar bei 100 nicht funktioniert. Bitte schlage mir vor, wie ich damit umgehen soll, wenn ich nur TimeOut bis zu 100 Sekunden benutzen darf und die Exception erfüllt Dies. – Roja

+0

Das ist wirklich zu lang, ich habe meine Antwort mit zusätzlichen Informationen aktualisiert – Marcel

+0

Das ist wirklich toll von dir. Es funktionierte und löste meine erste Ausnahme (WebDriver Exception) oben. – Roja

Verwandte Themen