2012-03-07 26 views
8

私は自分のサイトで選択コントロールを持っています。私はページオブジェクトを使ってページとやり取りしています。私は(私のクラスの下の最初の2行と、私の方法でselectByValue付き)セレンのwebdriver選択要素

@FindBy(id="foo") 
private Select foo; 

foo.selectByValue("myValue"); 

を行う場合にはNULLポインタで失敗します。私も@FindByなしで試しました。

今、私は私の方法でこれを行う場合は、それがすべて正しい項目を正常に動作し、選択

Select foo = new Select(sDriver.findElement(By.id("foo"))); 
foo.selectByValue("myValue"); 

ここで(無実を保護するために編集した)そのコントロールの実際のウェブスニペット

<select id="foo" name="service_name"> 
    <option selected="selected" value="one">one</option> 
    <option value="two">two</option> 
    <option value="three">three</option> 
</select> 
があります

私の問題のために回避策があるとしましょうしかし "普通"のパスが機能しない理由がわかりません。

答えて

17

ザッツSelectクラスは、このコンストラクタを持っているので:

@FindBy(id="foo") 
private WebElement wannabeSelect; 
Select realSelect = new Select(wannabeSelect); 
realSelect.selectByValue("myValue"); 

それが動作するはずです:

Select(WebElement element) 

は、あなたがこのような何かを行うのであればJavadoc

を参照してください。

私はSelectオブジェクトが必要なときに新しいWebElementオブジェクトをキャストしたくないので、私は「回避策」と同じ方法を使用しています。しかし、とにかく、

sDriver.findElement(By.id("foo")); 

返すWebElement、その理由はその働きです。また、この操作を行うことができます。

ワン:

// Denotes option value - technical name 
select.selectByValue(fieldValue);  

2:

// Denotes option text that is actually visible to be selected 
select.selectByVisibleText(fieldValue); 
+0

ああONCHANGEスクリプトをinitialzingています本当に深く掘り下げた私のせい。ありがとうございます – ducati1212

+0

注:Select宣言をインクルードしてクラスにキャストし、プライベートWebElement宣言のすぐ下にクラスをインスタンス化すると、ランタイムエラーが発生します。これを避けるには、スクリーンコントロールとのやりとりを行うメソッドにSelect宣言とクラスを入れることができます。再び理想的ではありませんが、うまくいくようです。 –

+0

この方法では、pageobjectsは、ページが完全にロードされ、オブジェクトが存在し、ドライバに表示された後で初期化する必要があります。それをプロキシにするには、[私の実装](http://stackoverflow.com/questions/35931667/select-object-on-seleniums-pagefactory/36004572#36004572) – rrw

2

これは、すべての私のonchangeドロップダウン選択ボックスに対して以下の方法を使用することによって達成されます。 idと選択を渡し、それが最大にすることで

public void onchangedropdownselection(String object, String value) { 
     driver.findElement(By.id(object)).sendKeys(value); 
     driver.findElement(By.id(object)).sendKeys(Keys.UP); 
     driver.findElement(By.id(object)).sendKeys(Keys.DOWN); 
    } 

を動作し、ダウン我々はそれが私が決して働いていないはずですようにそれがちょうど見えた理にかなって.......

+0

とselect.selectByIndex(intValue)を見てください。 – dmeehan

1

その他の方法Iオプションの値を選択する方法は2つあります

WebElement wannabeSelect = sDriver.findElement(By.id("foo")); 
Select foo = new Select(wannabeSelect); 
関連する問題