【问题标题】:Selenium 2.0 WebDriver Advcanced Interactions DoubleClick Help (c#)Selenium 2.0 WebDriver 高级交互 DoubleClick 帮助 (c#)
【发布时间】:2012-01-13 07:32:34
【问题描述】:

所以在我的 selenium 回归测试中,我一直在尝试双击日历来创建一个新的应用程序。我试图使用 doubleClick();高级用户交互库中的方法,但存在问题;两次点击不够快/不够近,无法触发实际的双击!有没有人在他们的测试中找到解决这个问题的方法?

【问题讨论】:

  • 还有,我正在使用的日历,比如这个:link
  • 不幸的是,该链接不允许双击空日历来创建新约会。但是,我能够双击现有日历并成功打开它。尽管在 Java 中,我使用了 Actions API。不确定这是否是您正在寻找的东西。如果你有兴趣,我可以发布代码
  • 你是对的,但即使模拟双击已经注册的甚至不适用于我的实际应用程序。不过我对代码很感兴趣,因为它可以帮助我找出 c# 等价物。

标签: c# selenium nunit webdriver double-click


【解决方案1】:

这段代码对我有用!

Actions action = new Actions(driver);
action.doubleClick(myElemment);
action.perform();

【讨论】:

  • 我已经尝试过了,但是由于某种原因,Actions doubleClick() 方法不能足够快地触发两次点击以注册为双击..
  • 好吧,我更新到了 Selenium 的当前版本,并且(没有代码更改)它现在启动得足够快了哈哈。不过,我会将其标记为解决方案,因为我认为 Actions 驱动程序是最简单/最有效的方法。
【解决方案2】:

这是 Java 的等价物。此代码将盲目打开第一个事件。您可以添加一些逻辑来打开特定事件等。此代码有效! (用 2.12 测试)

List<WebElement> events = driver.findElements(By.cssSelector("div.dv-appointment"));
for(WebElement event:events){
    WebElement body = event.findElement(By.cssSelector("div.body"));            
    if(!body.getText().isEmpty()) //or open a known event
    {
        System.out.println(body.getText()); //open the first event
        Actions builder = new Actions(driver);
        Action doubleClick = builder.doubleClick(event)
                                    .build();
        doubleClick.perform();
        break;                  
    }
}

【讨论】:

    【解决方案3】:

    不要忘记“使用”

    using OpenQA.Selenium;
    using OpenQA.Selenium.Interactions;
    using OpenQA.Selenium.Interactions.Internal;
    using OpenQA.Selenium.Support.UI;
    
    //create Actions object
    Actions builder = new Actions(driver);
    //create a chain of actions 
    builder.DoubleClick().Build().Perform();
    

    http://selenium-interview-questions.blogspot.ru/2014/03/how-to-double-click-on-web-element.html

    【讨论】:

      【解决方案4】:

      我也遇到了 Selenium 的双击事件在 Firefox 中有效但在 Chrome 中无效的问题。升级到 Selenium 并没有帮助。我已经有最新版本了。 (我的环境是 Ubuntu 14.04、Python 2.7.6、Selenium 2.44.0、Firefox 35.0、Chrome 40.0.2214.91。)

      我不确定为什么 CBRRacer 的回答被否决了。我通过使用两个点击事件成功地解决了这个问题。这适用于 Firefox 和 Chrome。有两种方法可以做到这一点,并且都对我有用。

      第一种方式:

      elem = driver.find_element_by_css_selector('#myElement')
      elem.click()
      elem.click()
      

      第二种方式:

      elem = driver.find_element_by_css_selector('#myElement')
      actions = webdriver.ActionChains(driver)
      actions.click(elem).click(elem).perform()
      

      【讨论】:

        【解决方案5】:

        我非常喜欢这里使用的方法,尤其是先对动作进行排队,然后再执行,因为这样可以重复应用动作链。

        http://selenium-python.readthedocs.org/en/latest/api.html#selenium.webdriver.common.action_chains.ActionChains

        来自链接的文档示例:

        menu = driver.find_element_by_css_selector(".nav")
        hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
        
        actions = ActionChains(driver)
        actions.move_to_element(menu)
        actions.click(hidden_submenu)
        actions.perform()
        

        【讨论】:

          【解决方案6】:

          您是否尝试过捕获 IWebElement 然后单击它两次?

          IWebElement element = driver.FindElement(By.Id("yourID"));
          element.Click();
          element.Click();
          

          我不知道这是否会为您提供所需的功能,但我知道当我执行上面的点击事件时,它的运行与实际用户的双击一样接近。

          另一种选择是引用ThoughtWorks.Selenium.Core,但唯一的缺点是我不确定它是否与当前的IWebDriver 兼容,我认为它需要它自己的IWebDriver 实例化。

          【讨论】:

          • 遗憾的是这不起作用。我在 AdvancedUserInteractions 之前尝试过这个,但似乎都没有真正执行双击。
          猜你喜欢
          • 2011-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-18
          • 1970-01-01
          相关资源
          最近更新 更多