Selenium.click在某些锚点元素上不起作用

| 正在处理的应用程序最近经过了修订,并且作为其中的一部分,引入了新的JQuery日历。我需要单击日历中的链接以选择时间和日期。但是,Selenium.click无法正常工作。命令被执行,但是屏幕上没有任何反应。 为了检查我的XPATH / CSS定位器(我都尝试过)是否正确,我添加了selenium.getText(locator)和selenium.highlight(locator)命令。两者都有效!没问题。它只有不起作用的点击。 检入Firebug后,我可以看到要尝试单击的div处于灰色状态。这是否意味着该元素已禁用?请参阅以下萤火虫的屏幕截图。 我也尝试在Selenium IDE中运行相同的命令。在IDE中,此功能“有时”起作用。 我正在使用Selenium 1.xx运行此测试。 更新:   我又做了一件事   调试。在测试运行中,我   在浏览器中打开Selenium IDE   以便记录什么动作   发生。 IDE记录了所有动作   直到点击为止但是我看不到   单击时在IDE中的任何内容   命令已执行。任何主意,   会是什么原因? 有人遇到过类似的问题吗?任何帮助,将不胜感激!!!     
已邀请:
尝试使用“ 0”,或使用与浏览器紧密集成的Selenium 2。 您可能和其他人一样遇到同样的问题,例如。 硒点击不适用于GWT 使用Selenium来“单击”非输入或非控制元素 它似乎与随Javascript添加的点击事件有关。 已编辑 我不知道您是否使用相同的日历实现,但是我发现fullcalendar.js jQuery替换了mouseover事件,您必须首先触发该事件。我使用它来工作
selenium.runScript(\"jQuery(\\\"a:contains(\'\" + NEW_EVENT_NAME
        + \"\')\\\").trigger(\'mouseover\');jQuery(\\\"a:contains(\'\"
        + NEW_EVENT_NAME + \"\')\\\").trigger(\'click\')\");
    
我们的JQuery日历实现与默认的Selenium定位器兼容,即使该定位器在DOM中似乎已被禁用。这是一个示例,供您尝试:
selenium.click(\"link=11:00 AM - 01:00 PM\");
    
好的,我只是假设您的XPATH获取的跨度是正确的,我怀疑您的selenium脚本的运行速度比您的页面加载速度快,因此请添加此功能以等待页面加载完毕
waitForPageToLoad
希望有所帮助 :)     
我最近遇到了类似的问题。请注意,我使用Selenium驱动程序。所以我不确定我的方法是否适合Selenium 1.xx 问题在于单击了鼠标悬停事件上出现的不可见菜单elemnt。 我为Firefox硒驱动程序找到的解决方案:
WebElement mnuElement;
WebElement submnuElement;
mnEle = driver.findElement(By.Id(\"mnEle\")).Click();
sbEle = driver.findElement(By.Id(\"sbEle\")).Click();

Actions builder = new Actions(driver);
// Move cursor to the Main Menu Element
builder.MoveToElement(mnEle).Perform();
// Giving 5 Secs for submenu to be displayed
Thread.sleep(5000L);
// Clicking on the Hidden SubMenu
driver.findElement(By.Id(\"sbEle\")).Click();
这是链接 主要思想是创建Actions实例,并尝试着重于您的元素并单击它。 我将以以下方式采取行动: //找到不可见元素的xpath:
    String xpathInvisible = \"//*[id=\"calendar\"]/div/div/div/div[1]\";

//find xpath of the element, on hovering which your invisible (inactive) element appear. I mean somthing //like VDIs (see my screen) on pressing which menu elements appear.

    String xpathCalendarToAppear =\".....\";

WebElement calendarToAppear= driver.findElement(By.xpath(xpathCalendarToAppear));
WebElement invisibleElement=driver.findElement(By.xpath(xpathInvisible));

Actions builder = new Actions(driver);
builder.MoveToElement(calendarToAppear).Perform();
// Giving 5 Secs for submenu to be displayed
Thread.sleep(5000L);
// Clicking on the Hidden SubMenu
invisibleElement.Click();
在Firefox中,这可以正常工作。但是IE驱动程序在单击元素时存在问题。 因此,我可以通过以下方式直接使用jscript解决此“ IE问题”:
WebElement hiddenWebElement =driver.findElement(By.xpath(....));
        ((JavascriptExecutor)driver).executeScript(\"arguments[0].click()\",hiddenWebElement);
我们使用要单击的元素初始化hiddenWebElement变量。 然后使用jscript单击它。 希望这对您有所帮助。     
我遇到了与您的问题类似的问题(我测试了一百个左右的锚定/链接元素,然后才拒绝使用标准的硒单击方法单击)。 就我而言,由于我完全不清楚的原因,我可以使用Selenium WebDriver Actions(在此为Java,在此为Ruby记录)执行clickAndHold / click_and_hold操作,然后执行释放操作,以解决该问题。在Ruby中,这样做是这样的(来自Ruby文档的代码示例):
el = driver.find_element(:id, \"some_id\")
driver.action.click_and_hold(el).release.perform
希望这对其他人有所帮助,也许有更多见识的人可以解释其背后的原因。     
请执行下列操作:
selenium.focus(\"locator path of where you want to click\");
selenium.keyPressNative(\"10\"); // this is clicking entering button
这应该做的工作。 确保在Selenium执行
keyPressNative
语句时不要触摸鼠标。     

要回复问题请先登录注册