2017-11-28 11 views
0

ヘッドレスモードが有効な場合にのみスクリプトが失敗します。コーディング中に私が見なければならないものを私に提案してください。ヘッドレスChromeでのパフォーマンスの問題

  1. ほとんどのスクリプトはTimedOutによって失敗しました。
  2. 特にロケータを探す必要があるものはありますか?私はこの場合、CSSが私を助けないと信じています。ロケータに関連する何か他に存在するだろうか?
  3. 連続統合サーバーでは、実行が非常に遅いです。 Timed_Out秒の制限は50に固定されています。これは私にとっても100であっても機能しませんでした。私がTimeOutまで100秒までしか使用できないように制限して、この。ここで

は私がヘッドレスを有効にする場合にのみ受け取る少数の例外あり、

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> 

は、待機条件を適用しようとしたとしてもスクロールとクリックしてください。

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) 

Marcelが提案した条件を適用しようとしました。あなたがWebDriverWaitを使用していない場合はそれも100seconds

ここ

私のコードのいくつかの例があり、

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

関連するHTMLとエラースタックトレースに失敗したコードブロックを共有できますか? – DebanjanB

+0

@Debanjan - 私はいくつかの例で私の質問を更新しました。チェックしてください。 – Roja

+1

ありがとうDebanjan私は、与えられたリンクを理解することによって私のコードを修正する方法を今や十分に明確にしています。 – Roja

答えて

1

超える語ったとおり、あなたがOpenQA.Selenium.Support.UIをインポートする必要が

​​

試すことを与えますWebDriverWaitを使用することができます。

編集

WebDriverWait方法は、ソリューションを提供していないので、ウィンドウサイズを設定するには、あなたのChromeOptionsに追加の引数を追加してみてください。デフォルトのヘッドレスウィンドウサイズは、ヘッドレスでないウィンドウサイズよりもかなり小さいので、試してみる価値があります。より大きなウィンドウサイズを設定することのさらなる利点は、スクロールの必要性を減らすことです。

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

// or 

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

ありがとうございました。私はこれを考慮した。継続的な統合サーバーでは、実行は非常に遅いです。 Timed_Out秒の制限は50に固定されています。これは私にとっても100であっても機能しませんでした。私がTimeOutまで100秒までしか使用できないように制限して、この。 – Roja

+0

それは本当に長すぎる、私は追加情報で私の答えを更新しました – Marcel

+0

それは本当にあなたの素晴らしいです。上記の私の1回目の例外(WebDriver Exception)を解決しました。 – Roja