1

私はバインディングを使用Selenium WebdriverしてC#、古い FirefoxDriver (FF 47 より前) から新しいMarionette driver(FF47 以降) に切り替えようとしていSelenium 2.53.1ますFF 47.0.1

唯一の問題は、select タグの下でオプション タグを選択する際に問題があるように見えることです。次のコードは、私がテストしている他のすべてのブラウザー (FF < 46、Chrome、IE) で機能します。次の引数をdropdownSelect関数に渡しています。selectIWebElementと検索するテキスト。関数定義は次のとおりです。

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

SelectElement()他のすべてのブラウザーと同じように、クラスを使用しようとしました

select = new SelectElement(inObject);

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

また、オプションのコレクションを取得し、両方を使用してコレクションをスクロールしようとしました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クリックthsItem.Click()

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

何も選択されず、エラーや例外はスローされません。何も選択せずに ただただ楽しく進んでいくだけ

何か間違ったことをしているのですか、それとも新しい Marionette ドライバーでまだ解決されていないことですか?

4

2 に答える 2

0

上記と同様のJavascriptを使用するだけでこれを理解しました。このドロップダウンが変更されると依存関係があるため、Selenium で見つかったときに適切なオプションを選択し、Javascript でも onchange を起動しました

選択ボックスの HTML は次のとおりです。

<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">

そして、アクションを実行するJavascript

//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);

IWebElement thsItem が選択されたオプションであり、IWebElement inObject がドロップダウンの選択タグです。

他の Selenium ドライバーが自動的に行うことを回避する方法のように思えますが、機能します

于 2016-08-12T12:13:54.470 に答える