Selenium.click无法处理某些锚元素

正在进行的应用程序最近进行了改进,并且作为其中一部分引入了新的JQuery日历。 我需要点击日历中的链接来选择时间和日期。 但是,Selenium.click无效。 该命令被执行,但屏幕上没有任何反应。

要检查我的XPATH / CSS定位器(我试过两者)是否正确,我添加了selenium.getText(locator)和selenium.highlight(locator)命令。 两个都工作! 没问题。 它只有点击不起作用。

在检查萤火虫时,我可以看到我试图点击的div是一种灰色的状态。 这是否意味着该元素被禁用? 请参阅下面的firebug屏幕截图。

我还尝试在Selenium IDE中运行相同的命令。 在IDE中,这有时“有时”。

我正在使用Selenium 1.xx运行此测试。

更新:

作为调试的一部分,我还做了一件事。 在测试运行期间,我在浏览器中打开了Selenium IDE,以便记录正在执行的操作。 IDE记录了所有操作,直到此次单击。 但是当执行click命令时,我在IDE中看不到任何内容。 任何想法的人,会是什么原因?

以前有人遇到过类似的问题吗? 任何帮助,将不胜感激!!! Firebug截图

尝试使用selenium.fireEvent(locater, 'click') ,或使用与浏览器更紧密集成的Selenium 2。

您可能遇到与其他人相同的问题,例如。

Selenium点击无法使用GWT

使用Selenium“点击”非输入或非控制元素

它似乎与使用Javascript添加的点击事件有关。

编辑

我不知道你是否使用相同的日历实现,但我发现fullcalendar.js jQuery one替换了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,它出现在鼠标hover事件中。 我找到的Firefox selenium驱动程序的解决方案:

 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点击方法点击)。

在我的情况下,我能够解决这个问题,原因完全不清楚,使用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语句时不要触摸鼠标。