【问题标题】:sendKeys() in Selenium web driverSelenium Web 驱动程序中的 sendKeys()
【发布时间】:2013-10-16 14:39:15
【问题描述】:

我是 Selenium 的新手。我只想将键发送到用户名文本框并同时发送一个 tab 键,以便文本框可以检查用户名的可用性。

代码如下:

 driver.findElement(By.xpath("//label[text()='User Name:']/following::div/input")).sendKeys("UserName");
 driver.findElement(By.xpath("//label[text()='User Name:']/following::div/input")).sendKeys(Keys.TAB);

但是这个不工作。

【问题讨论】:

  • 您是要同时发送两个 Key 还是要延迟然后 Tab?另外 Tab 命令是否独立工作(没有输入“用户名”)?
  • 它应该先输入用户名然后按TAB键。
  • 您可能只需要在两个操作之间添加一个轻微的等待命令。你能看到 Selenium 输入用户名的文本吗?
  • 你的方法对我有用。此外,您可以使用driver.findElement(By.xpath("...")).sendKeys("UserName" + Keys.TAB); 甚至driver.findElement(By.xpath("...")).sendKeys("UserName", Keys.TAB);。所有这些都对我有用。
  • @Lt_Shade 我确实看到 selenium 输入了用户名的文本。我尝试在两者之间添加等待。

标签: java selenium selenium-webdriver


【解决方案1】:

我怀疑Keys.TAB 中的sendKeys 方法...如果您想使用TAB,您需要执行以下操作:

Actions builder = new Actions(driver);
builder.keyDown(Keys.TAB).perform()

【讨论】:

    【解决方案2】:

    尝试在java中使用Robot类来按下TAB键。使用下面的代码。

    driver.findElement(By.xpath("//label[text()='User Name:']/following::div/input")).sendKeys("UserName");
    
    Robot robot = new Robot();
    robot.keyPress(KeyEvent.VK_TAB);
    robot.keyRelease(KeyEvent.VK_TAB);
    

    【讨论】:

    • 除了使用机器人还有其他方法吗?
    • 您可以在输入用户名后点击下一个可用元素。 driver.findElement(By.xpath("//label[text()='User Name:']/following::div/input")).sendKeys("UserName");driver.findElement(By.xpath("next element in webpage")).click();
    • 我也试过了,但有时有效,有时无效
    • 您是否在等待某个时间,等待消息(用户名可用)出现?
    【解决方案3】:

    试试这个代码:

    WebElement userName = pathfinderdriver.switchTo().activeElement();
    userName.sendKeys(Keys.TAB);
    

    【讨论】:

    • 为您的代码添加一些解释。这将使答案更好。
    【解决方案4】:

    这是发送 TAB 键的单行命令;

    driver.findElement(By.id("Enter_ID")).sendKeys("\t");
    

    【讨论】:

      【解决方案5】:
      List<WebElement>itemNames = wd.findElements(By.cssSelector("a strong")); 
      System.out.println("No items in Catalog page: " + itemNames.size());
         for (WebElement itemName:itemNames)
          {  
             System.out.println(itemName.getText());
          }
      

      【讨论】:

      • 请在代码上方发表描述,以便其他人了解您的所作所为
      【解决方案6】:

      试试这个,一定会成功的:

      driver.findElement(By.xpath("//label[text()='User Name:']/following::div/input")).sendKeys("UserName" + Keys.TAB);
      

      【讨论】:

        【解决方案7】:

        我相信 Selenium 现在使用 Key.TAB 而不是 Keys.TAB

        【讨论】:

        • 从 Selenium v​​3.141 开始,类仍然是 Keys
        • 奇怪的@MichaelBerry,除非我使用 Key,否则我无法让它工作
        【解决方案8】:

        试试这个,然后导入包:

        import org.openqa.selenium.Keys;
        
        driver.findElement(By.xpath("//*[@id='username']")).sendKeys("username");
        
        driver.findElement(By.xpath("//*[@id='username']")).sendKeys(Keys.TAB);
        
        driver.findElement(By.xpath("//*[@id='Password']")).sendKeys("password");
        

        【讨论】:

          【解决方案9】:

          最简单的解决方案是转到构建路径 > 配置构建路径 > Java 编译器,然后选择“编译器合规级别:”到 1.4 中的最新版本(可能你有这个)。

          【讨论】:

            【解决方案10】:

            对于python selenium,

            导入库,

            from selenium.webdriver.common.keys import Keys
            

            使用此代码按您想要的任何键,

            Anyelement.send_keys(Keys.RETURN)
            

            你可以通过搜索这个selenium.webdriver.common.keys找到所有的键名。

            【讨论】:

              【解决方案11】:

              我发现创建一个 var 来保存 WebElement 和调用 sendKeys() 对我有用。

              WebElement speedCurrentCell = driver.findElement(By.id("Speed_current"));
              speedCurrentCell.sendKeys("1300");
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-08-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2022-01-28
                • 2013-08-31
                相关资源
                最近更新 更多