2016-03-29 4 views
0

@FindBy変数のパス/位置をメソッドの引数として使用するにはどうすればよいですか?Page Object Factoryを使用したセレンのアサーション

私は私のクラスでは、次の@FindBy値を持っている...

@FindBy(xpath=".//*[@id='HasAnotherSubsidisedQual_container']") 
@CacheLookup WebElement mSubsidisedQual; 

私はその要素が存在するかどうかをチェックするための方法を持っている...

public boolean isElementPresent(By element){ 
    try { 
     mDriver.findElement(element); 
     return true; 
    } 
    catch (org.openqa.selenium.NoSuchElementException e){ 
     return false; 
    } 
} 

私は、そのメソッドを使用しますアサーションを含む別のメソッドで

public void checkSmartAndSkilled() { 
    Assert.assertTrue(isElementPresent(By.xpath(".//*[@id='HasAnotherSubsidisedQual_container']"))); 
} 

これはすべて正常に動作しますが、By.xpa th ...などのアサーションには、とにかく引数として渡すために、私の@FindBy WebElement mSubsidisedQualのパスですか?

感謝

+0

[Constant javaからアノテーションに値を供給する方法]の複製が可能です(http://stackoverflow.com/questions/2065937/how-to-supply-value-to-an-annotation-from-a- constant-java) – SiKing

答えて

0

あなたは再びXPathを提供する必要はありません。ページファクトリによって初期化されたら、要素を引数として渡します。

public void checkSmartAndSkilled() { 
    Assert.assertTrue(isElementPresent(mSubsidisedQual)); 
} 
+0

これは残念なことに動作しません。 WebElementをByを想定している引数に渡すことはできません。 – Konzy262

+0

Assert.assertTrue(boolean)はブール値の引数を要求します。また、isElementPresentはブール値を返します。できます。 – Haxor

0

誤った方法を作成しました。そして要素の存在をチェックする方法は間違っています。しかし、あなたがそれをこのようにしたいのであれば、それをオーバーロードしてパラメータがあなたの要素であるようにする必要があります。

次に、要素を呼び出します(たとえば、クリックするか、Enable、CountまたはLengthなどのプロパティやJavaで使用できるものを使用します)。要素が存在しない場合、同じエラーが発生します。存在する場合はtrueを返します。

関連する問題