押す必要があります Ctrl+A Selenium WebDriverを使用したキー。それを行う方法はありますか? Seleniumライブラリを調べたところ、Seleniumでは特別で機能的なキーのみのキー押下が許可されていることがわかりました。
もう1つの解決策(Javaでは、言語を教えていないため-しかし、Keys
クラスを持つすべての言語で同じように機能します):
String selectAll = Keys.chord(Keys.CONTROL, "a");
driver.findElement(By.whatever("anything")).sendKeys(selectAll);
これを使用して、<input>
またはページ全体でテキスト全体を選択できます(html
要素を見つけて送信します)。
EDIT-OPがSelenium Rubyバインディングを使用していると述べた後
Rubyバインディングの Keys
class にはchord()
メソッドがありません。したがって、Hari Reddyが提案したように、Selenium AdvancedユーザーインタラクションAPIを使用する必要があります。 ActionBuilder
を参照してください。
driver.action.key_down(:control)
.send_keys("a")
.key_up(:control)
.perform
クリックする Ctrl+A、アクションでそれを行うことができます
Actions action = new Actions();
action.keyDown(Keys.CONTROL).sendKeys(String.valueOf('\u0061')).perform();
\ u0061は、文字「a」を表します
\ u0041は文字「A」を表します
他の文字を押すには、Unicode文字テーブルを参照してください- http://unicode.org/charts/PDF/U0000.pdf
Selenium for C#では、Keys.Control
を送信すると、単にControlキーの状態が切り替わります。アップしている場合はダウンします。ダウンしている場合は、アップになります。 Control + Aを押すことをシミュレートするには、Keys.Control
を2回送信します。1回は「a」を送信し、その後は送信します。
たとえば、weが入力IWebElementである場合、次のステートメントはそのすべてのコンテンツを選択します。
we.SendKeys(Keys.Control + "a" + Keys.Control);
これを試すことができます:
driver.findElement(By.xpath(id("anything")).sendKeys(Keys.CONTROL + "a");
以来 Ctrl+A ASCIIコード値1(Ctrl+B 2、最大 Ctrl+Z 26)。
試してください:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenQA.Selenium;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Internal;
using OpenQA.Selenium.Remote;
namespace SeleniumHqTest
{
class Test
{
IWebDriver driver = new InternetExplorerDriver();
driver.Navigate().GoToUrl("http://localhost");
IWebElement el = driver.FindElement(By.Id("an_element_id"));
char c = '\u0001'; // ASCII code 1 for Ctrl-A
el.SendKeys(Convert.ToString(c));
driver.Quit();
}
}
Pythonの場合:
ActionChains(driver).key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).perform();
C#で最も簡単な回答(C#に興味がある場合)。
Actions action = new Actions();
action.KeyDown(OpenQA.Selenium.Keys.Control).SendKeys("a").KeyUp(OpenQA.Selenium.Keys.Control).perform();
この答えはほぼ上記のHari Reddyによって与えられましたが、いくつかのキーワードで間違っていたケースを修正しました。 Selenium.Keysは、この明確性が必要なのと同じクラスでWindows.Formsを使用している可能性があるためです。最後に、「a」と入力したのは、それが最も簡単な方法であることがわかったからです。OPからは、彼らが最も単純な答えを望んでいないという提案はありません。
私はアクションクラスの使用の初心者であり、多くの異なるコマンドを書いていたので、Hari Reddyに感謝します。
これは、C#(VS2015)とSeleniumを使用して私にとってうまくいったことです:
new Actions(driver).SendKeys(Keys.Control+"A").Perform();
間に(+)を使用して、必要な数のキーを追加できます。
WebDriver driver = new FirefoxDriver();
Actions action = new Actions(driver);
action.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).perform();
このメソッドは、Unicodeを文字列に変換するための余分な呼び出し(String.ValueOf())を削除します。
Rubyでは、send_keys
に2つの引数を渡すことができることがわかりました
このような:
element.send_keys(:control, 'A')
Actions act = new Actions(driver);
act.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).build().perform();
わたしにはできる:
OpenQA.Selenium.Interactions.Actions action
= new OpenQA.Selenium.Interactions.Actions(browser);
action.KeyDown(OpenQA.Selenium.Keys.Control)
.SendKeys("a").KeyUp(OpenQA.Selenium.Keys.Control).Perform();
JavaのRobotクラスを使用して:
import Java.awt.Robot;
import Java.awt.event.KeyEvent;
public class Test1
{
public static void main(String[] args) throws Exception
{
WebDriver d1 = new FirefoxDriver();
d1.navigate().to("https://www.youtube.com/");
Thread.sleep(3000);
rb.keyPress(KeyEvent.VK_TAB);
rb.keyRelease(KeyEvent.VK_TAB);
rb.keyPress(KeyEvent.VK_TAB);
rb.keyRelease(KeyEvent.VK_TAB);
// Perform [Ctrl+A] Operation - it works
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_A);
Thread.sleep(3000);
}
}