web-dev-qa-db-ja.com

キー入力(Ctrl + A)Selenium WebDriver

押す必要があります Ctrl+A Selenium WebDriverを使用したキー。それを行う方法はありますか? Seleniumライブラリを調べたところ、Seleniumでは特別で機能的なキーのみのキー押下が許可されていることがわかりました。

44
AJJ

もう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
57
Petr Janeček

クリックする 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

11
Hari Reddy

Selenium for C#では、Keys.Controlを送信すると、単にControlキーの状態が切り替わります。アップしている場合はダウンします。ダウンしている場合は、アップになります。 Control + Aを押すことをシミュレートするには、Keys.Controlを2回送信します。1回は「a」を送信し、その後は送信します。

たとえば、weが入力IWebElementである場合、次のステートメントはそのすべてのコンテンツを選択します。

we.SendKeys(Keys.Control + "a" + Keys.Control);

9
Robert P

これを試すことができます:

driver.findElement(By.xpath(id("anything")).sendKeys(Keys.CONTROL + "a");
4
Harish Gautham

以来 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();
    }
}
3
DeafJoe

Pythonの場合:

ActionChains(driver).key_down(Keys.CONTROL).send_keys("a").key_up(Keys.CONTROL).perform();
2
Raunak Thomas

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に感謝します。

1
Ewan

これは、C#(VS2015)とSeleniumを使用して私にとってうまくいったことです:

new Actions(driver).SendKeys(Keys.Control+"A").Perform();

間に(+)を使用して、必要な数のキーを追加できます。

0
Calin Popita
WebDriver driver = new FirefoxDriver();

Actions action = new Actions(driver); 

action.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).perform();

このメソッドは、Unicodeを文字列に変換するための余分な呼び出し(String.ValueOf())を削除します。

0
Revanth Kumar

Rubyでは、send_keysに2つの引数を渡すことができることがわかりました

このような:

element.send_keys(:control, 'A')

0
C Johnson
Actions act = new Actions(driver);
act.keyDown(Keys.CONTROL).sendKeys("a").keyUp(Keys.CONTROL).build().perform();
0
Athmeeya Gowda

わたしにはできる:

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();
0

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);
    }
}
0
G.V.K.RAO