下面是一些简单的代码片段。
@FindBy(className = "element-to-press")
private WebElement elementToPress;
// some other code
Keys move = Keys.ARROW_DOWN;
gridContainer.sendKeys(move);
在火狐一切正常。
在Chrome中,我得到了“org.openqa.selenium.WebDriverException:未知错误:无法聚焦元素”错误
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“无法聚焦元素”
错误,但浏览器仍然不会对键做出反应。向下箭头/键。向上箭头/键。向左箭头/键。向右箭头
事件
Safari和Firefox对sendKeys()也没有反应。
我无法理解正在发生什么,以及如何让我的代码在所有这些浏览器上运行。
环境:
>
OS X 10.9.5
最新版本的Chrome/Safari /Firefox
Selenium版本2.44.0
UPD:
将Selenium更新至2.46版。
现在适用于Chrome和Firefox。
但是Safari仍然存在一个问题:org。openqa。硒。遥远的UnreachableBrowserException:无法启动新会话
UPD2:
如聊天室中所述,您希望自动化2048
作为一种解决方法,我已经基于此编写了Javascript来发送Arrow KeyEvents。而且它在所有浏览器上都有效
您只需发送箭头键,无需单击元素[并查找元素,除非您创建了一个基于值播放的算法]
你把我卷进来了。以下将与200(50 x 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
参考以上答案获取完整代码
更新1
SafariDriver扩展不适用于Selenium 2.46。我已经试过了,您必须将Selenium降级到2.45,因为2.46的SafariDriver扩展尚未发布。请参阅此GitHub问题
所以从现在开始使用硒2.45
您必须手动安装SafariDriver扩展
根据SafariWiki
从Selenium 2.45.0开始,必须手动安装SafariDriver浏览器扩展。只需打开SafariDriver的最新副本。在Safari中选择safariextz并单击“安装”按钮。一旦安装,为Safari编写测试就像使用FirefoxDriver一样简单
问题内容: 以下代码可在Google Chrome beta和IE 7中运行。但是,Firefox似乎对此有问题。我怀疑这是我的CSS文件如何包含的问题,因为我知道Firefox对跨域导入不太友好。 但这仅仅是静态HTML,而没有跨域问题。 在我的landing-page.html上,我像这样进行CSS导入: 在main.css中,我还有另一个导入,例如: 在type.css中,我有以下声明: 我
问题内容: 好的,这是一些演示此问题的示例代码。如果我单击Firefox中的按钮,第一个选项将消失。如果单击chrome中的按钮,则什么也没有发生,或者如果我检查第一个选项,它确实具有属性“ style =’display:none’”,但html页面上的选项本身未隐藏。 为什么在chrome中不起作用? 问题答案: 解决方法是删除元素以响应您的事件,并在需要时以及在需要时将其重新添加。IIRC,
问题内容: 我刚刚更新到Firefox 32,当我尝试运行Selenium Webdriver Test时,我得到以下信息 我期望能够正常运行测试。 有没有人遇到过同样的事情?您是如何解决该问题的? selenium版本:2.41.0(作为Nuget软件包安装)操作系统:Windows 7浏览器:Firefox浏览器版本:32 问题答案: Selenium2.41.0正式支持的最新Firefox版
问题内容: 我想启动浏览器(FF,CHROME)以测试禁用的cookie,我尝试这样做: 但这不行… 问题答案: 我刚刚获得了Firefox的解决方案: 但我不知道如何使用Chrome进行管理。
问题内容: 我很难弄清楚为什么以下代码在Safari中显示为蓝色,而在Chrome和Firefox中显示为红色。 显然,Chrome和Firefox不支持其中具有多个级别的CSS选择器。 (可能的错误?) 我非常喜欢选择器,并且使用Safari开发,因此当我在Chrome上找到我的网站时,我几乎心脏病发作了。对于为什么会发生这种奇怪行为的任何解释,将不胜感激。 问题答案: Safari最近发布了的
问题内容: 我有一个包含两个内部div的容器div;两者在容器中的宽度和高度均应为100%。 我将两个内部div都设置为100%高度。在Firefox中效果很好,但是在IE中,div不会拉伸到100%的高度,而只会拉伸其中文本的高度。 以下是样式表的简化版本。 我做错什么了吗?还是我错过了任何Firefox / IE怪癖? 问题答案: 我认为“在Firefox中工作正常”仅在 Quirks模式下