gpt4 book ai didi

selenium - 如何在 Selenium 中按 shift + ctrl + s

转载 作者:行者123 更新时间:2023-12-02 02:59:38 25 4
gpt4 key购买 nike

如何在 Selenium 中按 shift + ctrl + s ?
我使用了下面的代码:

Actions action = new Actions(driver);   
action.sendKeys(Keys.chord(Keys.SHIFT + Keys.CONTROL + "s")).perform();

它的 throw 错误

最佳答案

如果您只是发送一系列键,那么 Webdriver 针对每个键码首先按下给定的键,然后按下它。
所以你的代码 sendKeys(Keys.chord(Keys.SHIFT + Keys.CONTROL + "s")相当于时间中的以下一系列事件:

  • 按SHIFT
  • 按下 SHIFT
  • 按控制
  • 按下 CONTROL
  • 按s
  • 压下

  • 这不是您想要的,因为您期望已按下 Ctrl 和 Shift 并且 举办在按下 S 键的那一刻。

    您需要使用 Actions#keyDown方法按下键并保持按下状态,稍后 Actions#keyUp释放 key 。所以 Action 的顺序可能是:
  • 按 SHIFT - 使用 keyDown
  • 按 Ctrl - 使用 keyDown
  • 按下然后释放 S(可以使用 sendKeys 方法按下并立即释放此键)
  • 等待按 Ctrl-Shift-S 的可见效果
  • 释放 Ctrl - 使用 keyUp
  • 释放 Shift - 使用 keyUp

  • 第 5 点和第 6 点(释放键)必须完成,以避免稍后在测试代码中出现意外效果(不要让 Ctrl+Shift 处于按下状态)。

    这是指向 simple page on jsfiddle 的链接这有助于我们测试我们的 WebDriver 代码。
    <body>

    <p>Press a key on the keyboard in the input field to find out if the Ctrl-SHIFT key was pressed or not.</p>

    <input id="ctrl_shift_s" type="text" onkeydown="isKeyPressed(event)">

    <p id="demo"></p>

    <script>
    function isKeyPressed(event) {
    console.log( event.keyCode);
    var x = document.getElementById("demo");
    if (event.shiftKey && event.ctrlKey && event.keyCode == 83 ) {
    x.innerHTML = "The Ctrl-SHIFT-S keys were pressed!";
    } else {
    x.innerHTML = "Please press Ctrl-SHIFT-S";
    }
    }
    </script>

    </body>

    如果您将光标移动到此页面上的 INPUT 字段(该元素的 id="ctrl_shift_s"),然后按 Ctrl-SHIFT-S 键(按住 SHIFT 和 Ctrl),则会出现一条消息 按下了 Ctrl-SHIFT-S 键!
    enter image description here

    下面是使用最新的 IE、Firefox 和 Chrome 驱动程序针对上述测试页面测试的示例(工作)代码。您必须使用 requireWindowFocus();选项以运行 Actions在 IE 驱动程序中。
    WebDriver driver= null;
    try{

    System.setProperty("webdriver.ie.driver", "C:\\instalki\\IEDriverServer.exe");
    System.setProperty("webdriver.chrome.driver", "C:\\instalki\\chromedriver.exe");
    System.setProperty("webdriver.gecko.driver", "C:\\instalki\\geckodriver.exe");

    InternetExplorerOptions opt = new InternetExplorerOptions();
    opt.requireWindowFocus();
    // driver=new InternetExplorerDriver(opt);
    // driver = new ChromeDriver();
    driver = new FirefoxDriver();

    driver.manage().window().maximize();

    WebDriverWait wait = new WebDriverWait( driver, 10);

    driver.get("https://jsfiddle.net/39850x27/2/");
    final By inputField = By.id("ctrl_shift_s");
    final By messageWeWaitFor = By.xpath("//*[text() = 'The Ctrl-SHIFT-S keys were pressed!' ]");
    final By frame = By.name("result");

    // Swift to a frame (our test page is within this frame)
    driver.switchTo().frame(driver.findElement(frame));

    // move a corsor to the field
    wait.until(ExpectedConditions.elementToBeClickable(inputField)).click();

    Actions a = new Actions(driver);

    // Press SHIFT-CTRL-S
    a.keyDown(Keys.SHIFT)
    .keyDown(Keys.CONTROL)
    .sendKeys("s")
    .build()
    .perform();


    //Wait for a message
    wait.until(ExpectedConditions.visibilityOfElementLocated(messageWeWaitFor));

    System.err.println("Success - Ctrl-Shift-S were pressed !!!");

    // Sleep some time (to see the message is really on the page)
    Thread.sleep(5000);

    // Release SHIFT+CTRL keys
    a.keyUp(Keys.CONTROL)
    .keyUp(Keys.SHIFT)
    .build()
    .perform();

    }finally {
    if(driver!=null) {
    driver.quit();
    }
    }

    关于selenium - 如何在 Selenium 中按 shift + ctrl + s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47115754/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com