以下是简单的代码段.
@FindBy(className = "element-to-press")
private WebElement elementToPress;
// some other code
Keys move = Keys.ARROW_DOWN;
gridContainer.sendKeys(move);
在Firefox中,一切正常.
在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浏览器“无法聚焦元素”错误,但浏览器仍无法对Keys.ARROW_DOWN / Keys.ARROW_UP / Keys.ARROW_LEFT / Keys.ARROW_RIGHT事件做出反应
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:无法启动新的会话.
UPD2:
我安装了Safari浏览器扩展程序.
解决方法:
解决方法是我写了Javascript based on this发送Arrow KeyEvents,并且它在所有浏览器上都有效
您要做的就是发送箭头键,根本不需要单击元素[和查找元素,除非您创建一个基于值播放的算法]
你让我明白了以下内容将为3个浏览器玩200(50 x 4)种不同动作的游戏
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();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。