49

Selenium WebDriver を使用してCtrl+キーを押す方法はありますか?A

Selenium ライブラリを確認したところ、Selenium では特殊キーとファンクション キーのみを押すことができることがわかりました。

4

14 に答える 14

64

もう1つの解決策(Javaでは、言語を教えてくれなかったためですが、Keysクラスを使用するすべての言語で同じように機能します):

String selectAll = Keys.chord(Keys.CONTROL, "a");
driver.findElement(By.whatever("anything")).sendKeys(selectAll);

<input>これを使用して、、またはページ全体のテキスト全体を選択できます(html要素を見つけて送信するだけです)。


Selenium Rubyバインディングを使用する場合:

Rubyバインディングのクラスchord()にはメソッドはありません。したがって、Hari Reddyが提案しているように、SeleniumAdvancedのユーザーインタラクションAPIを使用する必要があります。以下を参照してください。KeysActionBuilder

    driver.action.key_down(:control)
                 .send_keys("a")
                 .key_up(:control)
                 .perform
于 2012-07-16T17:52:47.370 に答える
16

Ctrl+をクリックAするには、アクションで実行できます

  Actions action = new Actions(); 
  action.keyDown(Keys.CONTROL).sendKeys(String.valueOf('\u0061')).perform();

\u0061 は文字「a」を表します

\u0041 は文字「A」を表します

他の文字を押すには、ユニコード文字表を参照してください - http://unicode.org/charts/PDF/U0000.pdf

于 2012-07-16T15:52:35.893 に答える
12

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

たとえば、入力IWebElementの場合、次のステートメントはその内容をすべて選択します。

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

于 2016-01-16T19:21:21.347 に答える
3

Ctrl+Aは ASCII コード値 1 にマップされるため ( +CtrlからB2、最大で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();
    }
}
于 2012-07-16T14:31:05.223 に答える
0

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

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

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

于 2016-09-29T13:05:43.037 に答える
0

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

このような:

element.send_keys(:control, 'A')
于 2016-05-02T19:20:01.747 に答える
0

わたしにはできる:

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();
于 2016-05-07T16:22:42.767 に答える
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);
        Robot rb = new Robot();
        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);

        // It needs to release key after pressing
        rb.keyRelease(KeyEvent.VK_A);
        rb.keyRelease(KeyEvent.VK_CONTROL);
        Thread.sleep(3000);
    }
}

于 2016-07-25T15:20:49.957 に答える
0

ジャワ

Robotクラスは、Selenium sendkeys を介してキーを送信するよりもはるかに効率的に機能します。してみてください:

例:

Robot rb = new Robot();
rb.keyPress(KeyEvent.VK_CONTROL);
rb.keyPress(KeyEvent.VK_A);

上記のRobotクラスを使用するには、 import java.awt.Robot;'.

于 2017-11-07T12:35:16.687 に答える