2017-11-08 10 views
1

私はこのようなセレンで明示的に待機を整理するつもりです:セレンでページファクトリを使用しているときに明示的に待機するにはどうすればいいですか?

WebDriverWait = new WebDriverWait(driver,30); 

WebElement element = wait.until(ExpectedConditions.presenceOfElementLocated(locator)); 

私はテストでPageFactory、ないコンストラクタを使用しているため、問題は、私は私のクラスでドライバーを持っていないということですクラス:

MyClass myform = PageFactory.InitElements(driver, MyClass.class) 

この場合、明示的な待機を整理するとよいでしょうか?

+0

見つけることができブックセレンwebdriverを実践ガイドの例に倣った...'のPageObjectクラスのコンストラクタで、その後、 'MyClass myform = new MyClass(ドライバ);'を実行します。 – SiKing

答えて

4

私は意図したようにPageFactoryを使用し、明示的な待機を使用するクラスのコンストラクタを用意することをお勧めします。スクリプトとページオブジェクトを分離することで、将来の作業がはるかに簡単になります。

public class MyClass { 

    WebDriverWait wait; 
    WebDriver driver; 
    @FindBy(how=How.ID, id="locatorId") 
    WebElement locator; 

    // Construct your class here 
    public MyClass(WebDriver driver){ 
     this.driver = driver; 
     wait = new WebDriverWait(driver,30); 
    } 

    // Call whatever function you want to create 
    public void MyFunction(){ 
     wait.until(ExpectedConditions.presenceOfElementLocated(locator)); 
     // Perform desired actions that you wanted to do in myClass 
    } 

次に、テストケースでコードを使用してテストを実行します。あなたの例では、待機はページの中に含まれています。

public class MyTestClass { 
    public static void main (string ... args){ 
     WebDriver driver = new FireFoxDriver(); 
     MyClass myForm = PageFactory.initElements(driver,Myclass.class); 
     myForm.MyFunction(); 
    } 
} 

この例では、 `PageFactory.InitElementsを入れ、ここhere

+0

それは動作します。ありがとうございました! – dmytrocx75

関連する問題