【问题标题】:Sendkeys in SeleniumSelenium 中的发送键
【发布时间】:2016-07-26 22:27:33
【问题描述】:

我正在尝试使用 selenium 发送密钥,但它不想在第一次尝试时发送它们。基本上我们的应用程序建立在 HTML5、Javascript、Angularjs 之上。我们在第一页有视频播放器(来自 AngularJS 的 Videogular)。我可以通过发送按键来暂停/播放视频:

Actions action = new Actions(driver);
    action.sendKeys(String.valueOf('\u0050')).perform();

Actions action = new Actions(driver);
    action.sendKeys(String.valueOf("p")).perform();

但是当我尝试前进时,以相同的方式发送键来倒带(f/r)

 Actions action = new Actions(driver);
    action.sendKeys(String.valueOf("f")).perform();

播放器完全没有反应,有时我放了 5 或 10 的循环来查看结果 但是,如果我使用的是真正的键盘,它可以在第一次尝试时没有问题。 我什至是这样做的:

driver.findElement(By.xpath("//body")).sendKeys("f");

在发送密钥之前我什至点击了视频播放器(用户故事中不需要),仍然没有运气

花一整天的时间去弄清楚,仍然没有运气。可能有人遇到过类似的问题并知道如何解决吗?

任何帮助表示赞赏

【问题讨论】:

  • 此播放器的 html 网页元素?
  • 我们正在使用来自 AnjularJS 的 Videogular

标签: javascript java angularjs selenium selenium-webdriver


【解决方案1】:

Actions API 中还有另一个 sendKeys 方法,它采用目标 WebElement

sendKeys(WebElement element, CharSequence... keysToSend) 

我会试一试。

Actions actions = new Actions(driver);     
//FIXME:  Get correct lookup for the VideoPlayer element.   
WebElement videoPlayer = driver.findElement(By.xpath(""));        
String play = "p";        
//Send "p" to the videoPlayer webElement
actions.sendKeys(videoPlayer, play).perform();

你使用的方法

sendKeys(CharSequence... keysToSend)

将命令发送到活动元素,它可能不是您希望接收密钥的 VideoPlayer。

【讨论】:

  • 谢谢您的回复。但不幸的是,相同的结果:仅适用于播放/暂停而不适用于倒带/前进(((。我要疯了,因为发送一个键而不是其他键对我来说没有意义,但从键盘工作正常..我正在考虑通过 java 脚本执行器 WebElement rewind = driver.findElement(By.xpath("//body")); myExecutor.executeScript("arguments[0].value='r';", rewind); 来做,但也没有这样工作
【解决方案2】:

不要将键发送到页面主体,而是尝试将它们发送到添加了按键观察器的容器:

driver.findElement(RfBy.cssSelector(".video-container"))
      .sendKeys("f");

【讨论】:

  • 我试过这种方式,但它给了我一个例外:WebDriverException: unknown error: cannot focus element。有什么想法吗?
  • 嗯,我还没遇到过。您可以尝试在发送键之前将点击事件发送到元素,也许?根据您使用的网络驱动程序(例如 chrome、firefox 等)和 selenium 版本,有时也会出现问题。
  • 我今天也试过了,同样的例外。我尝试在 Chrome 和 Opera 上运行(我们的应用程序不支持 Firefox)。我们的应用程序最初是为 Amazon Fire TV 制作的,但我们制作了本地副本以进行自动化 - 这就是为什么它只支持 2 个浏览器......我今天整天都在工作中弄清楚......甚至试图发送字母序列“ fffff" 不走运(。我正在使用最新的 selenium 2.53
  • 刚用不同的浏览器试了下,不行。然后可能会手动测试它。谢谢
猜你喜欢
  • 2018-06-10
  • 2018-04-24
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 2021-08-29
相关资源
最近更新 更多