2017-05-15 7 views
0

私はコントロールの数(テキストボックス、チェックボックス、ドロップダウン)が30と言われるエンドユーザーページを1つ持っています。これらはすべて管理パネルから有効になっています。セレンのwebdriverで手作業で処理する方法

私はこれをtry catchブロックに個別に封入しました。

問題は、管理者が自分のコードの最後に1フィールドしか使用できないとします。だから、スクリプトを実行している間、My Scriptは各要素を1つずつチェックし、見つからない場合は遅すぎるため、最後の要素が見つかるまでcatchブロックで処理します。

この時間を無駄にする方法はありますか?

+1

として一般にアクセスクラスのメソッドgetElement(By)を作成する必要があります「有効」と「無効」になるのはどうですか? – DebanjanB

答えて

1

findElementsを使用して、見つかった要素があるかどうかを確認できます。存在しない場合は、例外なしで空のリストを取得します。あなたはそれが存在するかnull場合、それは

private WebElement findElement(WebDriver driver, By locator) { 
    List<WebElement> elements = driver.findElements(By.locator); 
    return elements.size() > 0 ? elements.get(0) : null; 
} 

findElements(driver, By.locator); // For Control 1 
findElements(driver, By.locator); // For Control 2 
// ... 
0

をしない場合は、実行して、タイムアウトを管理できる要素を返すメソッドを構築することができます:

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

あなたがにしたい場合は、この操作を行うことができますあなたの方法の始めから、あなたが持っていたものにもう一度セットし、あなたのサイトのニーズに最も適したものにしてください。その上

より:このようなシナリオでhttp://www.seleniumhq.org/docs/04_webdriver_advanced.jsp

0

、FluentWaitを使用しては、最も信頼性の高いアプローチです。あなたは私たちで管理者の制御下に入ったときにコントロールの関連するHTMLのDOM(テキストボックス、チェックボックス、ドロップダウン)を共有することはできdriver.findElement(By)を使用してチャックし、代わりに、そのようなBasePage.class

 
public class BasePage { 

    WebDriver driver; 

    public BasePage(WebDriver driver) { 
     this.driver = driver; 
    } 

    public WebElement getElement(By locator) { 
     // Waiting 30 seconds for an element to be present on the page, checking 
     // for its presence once every 5 seconds. 
     Wait wait = new FluentWait(driver) 
      .withTimeout(30, SECONDS) 
      .pollingEvery(5, SECONDS) 
      .ignoring(NoSuchElementException.class); 

     // Get the web element 
     WebElement element = wait.until(new Function() { 
      public WebElement apply(WebDriver driver) { 
       return driver.findElement(By.id("foo")); 
      } 
     }); 

     return element; 
    } 
} 
関連する問題