2016-04-07 19 views
0

私は基本的にボタンが押されるたびに新しいテキストフィールドを作成するWebページを自動化しています。 PageFactoryでFindByアノテーションを使用して、テキストフィールドのリストを探しています。Selenium WebDriverで要素を待っています

ボタンを数回押して複数のテキストフィールドを作成し、そのうちの1つに書き込もうとすると、同期に問題があります。デバッガを踏むと正常に動作しますが、デバッガからFindByがすべてのテキストフィールドを検出するまでに時間がかかります。 現在の回避策は、必要な数のテキストフィールドが見つかるまでスリープしますが、これは非常に不満足です。どのように同期を行うのが最善の方法ですか?

@FindBy(how= How.XPATH, using="//*[contains(@id, 'TextField')]") 
private List<WebElement> textFields; 
: 
: 
public void enterText(Integer index, String text){ 
    int attempts = 0; 
    // Check every 10th of a second for 10 seconds if all the textFields have been found 
    while ((textFields.size() <= index) && attempts < 100){ 
     Thread.sleep(100); 
    } 

    textFields.get(index).sendKeys("blah blah"); 

} 
+2

これを参照してくださいhttp://www.obeythetestinggoat.com/how-to-get-selenium-to-wait-for-page-load-after-a-click.html – dnit13

答えて

1

まず、暗黙的に、スクリプトに存在するすべての要素を待ちます。 この待機は

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 

は今、あなたは、コードの下に使用できる追加の時間を必要とする特定の要素の直後get.("URL");

上の開始スクリプト内のすべての要素の存在を待っている: -

WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("someid"))); 

以下を参照してください。 -

http://toolsqa.com/selenium-webdriver/wait-commands/

希望はあなたを助けるでしょう:)

関連する問題