56

selenium.focus()WebDriverに相当するものは何ですか?

element.sendKeys("");

また

new Actions(driver).moveToElement(element).perform();

私はそれらの両方を試してみましたが、それらは機能しましたが、すべての要素で常に機能するのはどれですか?

要素 (ボタン、リンクなど) の正しい方法はどれですか? 関数はさまざまな UI で使用されるため、これは私にとって重要です。

4

7 に答える 7

66

次のコード -

element.sendKeys("");

情報を入力するための入力タグボックスを見つけようとしますが、

new Actions(driver).moveToElement(element).perform();

画像要素、リンク要素、ドロップダウン ボックスなどで機能するため、より適切です。

したがって、moveToElement()メソッドを使用すると、Web ページ上の任意の汎用 WebElement に焦点を当てることがより理にかなっています。

入力ボックスの場合、フォーカスする要素でclick()する必要があります。

new Actions(driver).moveToElement(element).click().perform();

リンクと画像の場合、マウスはその特定の要素の上にありますが、やりたいことに応じてクリックすることができます。

入力タグの click() が機能しない場合 -

この関数を汎用にしたいので、最初に webElement が入力タグであるかどうかを確認します -

if("input".equals(element.getTagName()){
   element.sendKeys("");
} 
else{
   new Actions(driver).moveToElement(element).perform();

}

好みに応じて同様の変更を加えることができます。

于 2012-07-05T04:51:11.647 に答える
16

JSは次のように使用できます。

WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor) driver;
jse.executeScript("document.getElementById('elementid').focus();");
于 2013-01-28T10:48:07.953 に答える
2

FWIW、私は関連する問題だと思うものを持っていて、回避策を思いつきました:私は要素にシステム クリップボードの内容。これは 100% 手動で機能しましたが、Selenium で実行した場合、execCommand はほぼ常に false を返しました。

最初の driver.get( myChromeExtensionURL ) の後に driver.refresh() を追加したところ、100% の確率で動作するようになりました。これは、Selenium ドライバー バージョン 2.16.333243 および Mac OS 10.9 の Chrome バージョン 43 で発生しました。

この問題を調査していたとき、この回避策について言及されていなかったので、Selenium/focus/execCommand('paste') の足跡をたどる人のために、私の発見を文書化しようと思いました.

于 2015-07-04T17:56:40.010 に答える
0

以下のコードを使用して webelement にフォーカスすることもできます。

public focusElement(WebElement element){
    String javaScript = "var evObj = document.createEvent('MouseEvents');"
                    + "evObj.initMouseEvent(\"mouseover\",true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);"
                    + "arguments[0].dispatchEvent(evObj);";

            ((JavascriptExecutor) getDriver()).executeScript(javaScript, element);
}

それが役に立てば幸い :)

于 2019-07-26T13:41:35.937 に答える