2015-07-21 130 views
0

下面是简单的代码片段。Selenium sendKeys()针对Chrome,Firefox和Safari的不同行为

@FindBy(className = "element-to-press") 
private WebElement elementToPress; 

// some other code 

Keys move = Keys.ARROW_DOWN; 
gridContainer.sendKeys(move); 

火狐一切工作正常。

我有"org.openqa.selenium.WebDriverException: unknown error: cannot focus element"错误

Safari浏览器不适合的SendKeys()反应

我也试着使用另一种方法:

Keys move = Keys.ARROW_DOWN; 
Actions actions = new Actions(driver); 
actions.moveToElement(element).click(); // to focus on element 
actions.sendKeys(move).perform(); 

这代码已修复Chrome"cannot focus element"错误,但浏览器仍不会对发生反应事件

Safari和Firefox也不会对sendKeys()做出反应。

我无法理解正在发生什么,以及如何让我的代码可以运行在所有这些浏览器上。

环境

  • OS X 10.9.5

  • 最新版本的Chrome/Safari/Firefox的

  • 硒版本2.44.0

UPD:

将Selenium更新到版本2.46。

现在适用于Chrome和Firefox。

但仍然有一个问题与Safari浏览器:org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session.

UPD2:

我已经安装了Safari浏览器扩展。 enter image description here

+1

使用硒2.46和2.16 chromedriver [从这里](HTTP://docs.seleniumhq。 org/download /) – Madhan

+0

将Selenium更新到2.46版。现在适用于Chrome和Firefox。 但Safari仍然存在问题。 –

+0

您是否安装了[Safari Driver Extension](http://selenium-release.storage.googleapis.com/2.45/SafariDriver.safariextz)阅读abt [here](https://github.com/SeleniumHQ/selenium/) wiki/SafariDriver#入门) – Madhan

回答

1

正如在聊天讨论要自动2048

正如我已经写Javascript based on this发箭的KeyEvents一种解决方法。和它的工作在所有浏览器

所有你想要做的就是发送箭头键根本不需要点击元素[找到元素,除非你创建一个算法来播放基于值)

你让我到这一信息。以下将玩游戏的200(50×4)不同的动作3个浏览器

import org.openqa.selenium.By; 
import org.openqa.selenium.JavascriptExecutor; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.safari.SafariDriver; 

public class Main { 

public static void main(String args[]) { 
    play(new FirefoxDriver()); 
    play(new SafariDriver()); 
    System.setProperty("webdriver.chrome.driver", "/Users/Apple/Documents/chromedriver"); 
    play(new ChromeDriver()); 
} 

public static void play(WebDriver driver) { 
    driver.get("http://gabrielecirulli.github.io/2048"); 
    driver.findElement(By.className("restart-button")).click(); 
    String script = "fireKey(arguments[0]);\n" 
      + "function fireKey(arrow)\n" 
      + "{\n" 
      + " var key;\n" 
      + " switch (arrow.toLowerCase())\n" 
      + " {\n" 
      + "  case \"left\":\n" 
      + "   key = 37;\n" 
      + "   break;\n" 
      + "  case \"right\":\n" 
      + "   key = 39;\n" 
      + "   break;\n" 
      + "  case \"up\":\n" 
      + "   key = 38;\n" 
      + "   break;\n" 
      + "  case \"down\":\n" 
      + "   key = 40;\n" 
      + "   break;\n" 
      + " }\n" 
      + " if (document.createEventObject)\n" 
      + " {\n" 
      + "  var eventObj = document.createEventObject();\n" 
      + "  eventObj.keyCode = key;\n" 
      + "  document.documentElement.fireEvent(\"onkeydown\", eventObj);\n" 
      + " } else if (document.createEvent)\n" 
      + " {\n" 
      + "  var eventObj = document.createEvent(\"Events\");\n" 
      + "  eventObj.initEvent(\"keydown\", true, true);\n" 
      + "  eventObj.which = key;\n" 
      + "  document.documentElement.dispatchEvent(eventObj);\n" 
      + " }\n" 
      + "} "; 

    JavascriptExecutor js = (JavascriptExecutor) driver; 
    //use left,right,up,down for arrow keys 
    for (int i = 0; i < 50; i++) { 
     js.executeScript(script, "left"); 
     js.executeScript(script, "right"); 
     js.executeScript(script, "up"); 
     js.executeScript(script, "down"); 
    } 
    System.out.println("Score :" + driver.findElement(By.className("score-container")).getText()); 
    driver.quit(); 
} 
} 
2

更新2

请参考above答案fullcode


更新1

SafariDriver扩展不与硒2.46.I've工作试过您必须将Selenium降级为2.45,因为SafariDriver Extensio n 2.46还没有发布。所以请参阅本GitHub Issue

截至目前去与硒2.45


最初的回答

您必须安装SafariDriver Extension手动

SafariWiki

硒2.45开始.0,您必须手动安装 SafariDr iver浏览器扩展。只需在Safari中打开最新版本的 SafariDriver.safariextz,然后单击“安装”按钮。一旦安装 ,书写了Safari浏览器的测试就是那样简单 使用FirefoxDriver

+0

我安装了SafariDriver Extension。问题是驱动程序无法启动新的会话:org.openqa.selenium.remote.UnreachableBrowserException:无法启动新的会话。 –

+0

@art_tykh更新回答检查 – Madhan

+0

降级到Selenium 2.45通过浏览器启动解决了问题。但Safari仍不会对sendKeys()事件做出反应。你知道为SafariDriver发送“Keys.ARROW_RIGHT”的最佳方式是什么? –

相关问题