2016-07-07 18 views
1

私はC#バインドでSelenium Webdriverバインディングを使用していて、古いFirefoxDriver(FF47より前)から新しいMarionette driver(FF47以上)に切り替えようとしています。 Selenium 2.53.1FF 47.0.1のリリースで修正されたようです。C#:Marionetteドライバでドロップダウンアイテムを選択

唯一の問題は、選択タグの下でオプションタグを選択する際に問題があるように思われることです。次のコードは、テスト中の他のすべてのブラウザ(FF < 46、Chrome、IE)で動作します。私は以下の引数を私のdropdownSelect関数に渡しています。選択するIWebElementと検索するテキスト。ここでは関数の定義です:

public static void dropdownSelect(IWebDriver driver, IWebElement inObject, string inText) 

私は他のブラウザ

select = new SelectElement(inObject); 

//select the matching element 
select.SelectByText(inText); 

の全てを持っているとして、私はまた、オプションのコレクションを取得し、スクロールしようとしたSelectElement()クラスに使用することを試してみましたコードのthsItem.Click()一片の代わりに

IJavaScriptExecutor js = driver as IJavaScriptExecutor; 
ReadOnlyCollection<IWebElement> optDropdown; 

optDropdown = inObject.FindElements(By.TagName("option")); 

foreach (IWebElement thsItem in optDropdown) 
{ 
    //check for matching text 
    if (thsItem.Text == inText) 
    { 
     // 1/4 second wait 
     Thread.Sleep(250); 

     thsItem.Click() 

     //exit foreach loop 
     break; 
    } 
} 

javascriptクリック:両方Click()を使用してコレクション

//click option element 
js.ExecuteScript("arguments[0].click();", thsItem); 

何も選択されず、エラーまたは例外はスローされません。

私は間違ったことをやっているのですか、それとも新しいマリオネットのドライバーとはまだ解決していますか?

+0

同じ作業をしましたか?私はまったく同じ問題に直面している、私はこの問題を解決するために見つけることができるすべてのオプションを試して、どんな助けも素晴らしいだろう。 –

答えて

0

私はちょうど上で説明したものと同様Javascriptを使用してこれを考え出しました。それが私を変え、このドロップダウンへの依存性があるため、それがセレンで見つかったとさえJavascriptを

でのonchangeを解雇されたときにちょうどここで選択ボックス

<select class="T2FormControl" id="ctl00_pageContent_TableList_T2DropDownList_DropDownList" onchange="javascript:setTimeout('__doPostBack(\'ctl00$pageContent$TableList$T2DropDownList$DropDownList\',\'\')', 0)" name="ctl00$pageContent$TableList$T2DropDownList$DropDownList"> 

とは、HTMLの適切なオプションを選択しましたIWebElement thsItemが選択されたオプションであることとIWebElement inObject、ドロップダウン

ためのselectタグであることで、アクション

//click option element and for change event 
js.ExecuteScript("arguments[0].selected = true;" + 
       "var element=arguments[1];" + 
       "var event=document.createEvent(\"HTMLEvents\");" + 
       "event.initEvent('change', false, true);" + 
       "element.dispatchEvent(event);", thsItem, inObject); 

を行い、Javascriptを

他のSeleniumドライバーが自動的にやることをするためには、ラウンドアバウトのように思えますが、動作します。

0

は以下の通りExecuteScript()で全体oprationをお試しください: -

public static void dropdownSelect(IWebDriver driver, IWebElement inObject, string inText) { 

    IJavaScriptExecutor js = driver as IJavaScriptExecutor; 
    js.ExecuteScript("var select = arguments[0]; for(var i = 0; i < select.options.length; i++){ if(select.options[i].text == arguments[1]){ select.options[i].selected = true; } }", inObject, inText); 

} 

はそれが仕事を願っています... :)

+0

それは部分的に動作する。ドロップダウンに依存しない限り、正常に動作します。しかしながら、依存性がある場合(すなわち、選択されたドロップダウンの値は、以前に設定されたドロップダウンの値に依存します)、値が選択され、値を送信するボタンが選択されると、依存ボックスのドロップダウン値は消えます ほぼそこに! –

+0

このオプションも私にとっては機能しません。ドライバを待たせましたか? –

関連する問題