当前位置: 首页 > 知识库问答 >
问题:

Selenium sendKeys()适用于Chrome、Firefox和Safari的不同行为

邓光耀
2023-03-14

下面是一些简单的代码片段。

@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:


  • 共有2个答案

    拓拔安邦
    2023-03-14

    如聊天室中所述,您希望自动化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();
    }
    }
    
    席安康
    2023-03-14

    更新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模式下