0

バックグラウンド:

Selenium 2.0(WebDriver)を使用しており、次のように、要素を見つけるときにフォーカスが要素に移動することを理解しています。

var element = driver.FindElement(By.CssSelector("#foo"));
element.Click();

また、テスト対象のページに jQuery があれば、強力なことを実行できることもわかっています (すばらしい方法です)。

IJavaScriptExecutor scriptExecutor = ((IJavascriptExecutor)driver);
scriptExecutor.ExecuteScript("$('#foo')[0].click();";
IWebElement hiddenElement = scriptExecutor.ExecuteScript("return $('#my_dynamic_element')[0]");
hiddenElement.Click;   // found ya!

質問:

Selenium の WebDriver (具体的には .NET フレーバー) は、.ExecuteScript()結果を に変換しているときにフォーカスを起動しIWebElementますか?

4

1 に答える 1

2

私はそうは思いません。これをテストするために設定したテストを次に示します。

要素がフォーカスされたときにクラス名を変更するスクリプトを含む次の html ページを作成しました。

<script>
  function ChangeClass(theName, theClass)
  {
      document.getElementById(theName).className=theClass;
  }
</script>
<input type="text" class="notFocused" onfocus="ChangeClass('textfieldOne', 'focused');"    id="textfieldOne" />

フィールドがフォーカスされると、クラス名が変更されます。

次に、IJavaScriptExecutor を使用して要素を取得する次の WebDriver テストを実行し、要素がフォーカスされたことを示すためにクラス名が変更されたかどうかを確認します。

IWebDriver webDriver = new ChromeDriver();
webDriver.Navigate().GoToUrl("test.html");

IJavaScriptExecutor scriptExecutor = (IJavaScriptExecutor)webDriver;
IWebElement element = (IWebElement)scriptExecutor.ExecuteScript("return document.getElementById('textfieldOne');");

Assert.AreEqual("focused", element.GetAttribute("class"));

アサートが失敗し、フォーカスが設定されていないことがわかります。

于 2012-07-19T21:12:22.210 に答える