【问题标题】:How to click on a hyperlink in Selenium using c#如何使用 c# 在 Selenium 中单击超链接
【发布时间】:2012-02-25 05:57:49
【问题描述】:

我刚刚开始使用 Selenium。我试图在网页上的链接上调用点击操作,但由于某种原因,selenium.click() 事件甚至没有显示在智能感知上!在 foreach 循环内。下面是我正在尝试做的部分代码。

    IWebDriver driver;
    driver = new InternetExplorerDriver();
    driver.Navigate().GoToUrl("http://www.google.com");
    List<IWebElement> links = new List<IWebElement>();
    links= driver.FindElements(By.TagName("a")).ToList();
    //driver.FindElement(By.LinkText("YouTube")).Click();
    foreach (var link in links)
    {
        OpenQA.Selenium....;
        ..
    }

请注意,单击在 foreach 循环上方的注释行中可以正常工作。 我是否缺少参考资料?

【问题讨论】:

    标签: c# selenium hyperlink webdriver selenium-webdriver


    【解决方案1】:

    您为什么希望selenium.Click(); 出现?从您提供的代码来看,您使用的是 WebDriver,而不是 Selenium RC 或 WebDriverBackSelenium。您可能应该考虑使用 link.Click(); 之类的东西。

    这是我使用 WebDriver 所做的,对我来说效果很好。

    IWebDriver driver = new InternetExplorerDriver();
    driver.Navigate().GoToUrl("http://www.google.com");
    
    // find directly, note it's not in the <a> but in <span>
    // driver.FindElement(By.XPath("//span[text()='YouTube']")).Click();
    
    // your logic with LINQ
    IList<IWebElement> links = driver.FindElements(By.TagName("a"));
    links.First(element => element.Text == "YouTube").Click();
    
    // your logic with traditional foreach loop
    foreach (var link in links) {
        if (link.Text == "YouTube") {
            link.Click();
            break;
        }
    }
    
    driver.Quit();
    

    【讨论】:

      【解决方案2】:

      我猜By 方法找不到您的 TagName。请改用By.LinkText("a")

      links= driver.FindElements(By.LinkText("a")).ToList();
      

      或尝试其他By 方法(id、className、...)

      欧元:

      List<IWebElement> links = new List<IWebElement>();
          links.add(driver.FindElements(By.TagName("a")));
          //driver.FindElement(By.LinkText("YouTube")).Click();
      
      links.get(0).click();
      

      【讨论】:

      • 事实上,确实如此。我面临的问题是,在循环中, selenium.click(...) 应该可用,正如我在许多示例中看​​到的那样。但是,它不存在。 Selenium 没有将 click() 列为我可以使用的可用方法。 ...ToList() 实际上用页面上所有可用的链接填充链接列表,它们都是正确的。
      • 也许你的代码有问题。我是Java程序员,从我的角度来看,您将链接定义为一种方法?我可能会像上面编辑的答案一样写它
      【解决方案3】:

      您可以尝试在您的 foreach 循环中将他链接到 IWebELement,例如:

       foreach(IWebELelent link in links) 
      {
      ------
      -----
      }
      

      【讨论】:

        【解决方案4】:
        driver.FindElement(By.Xpath("")).Click();
        

        driver.FindElement(By.Xpath("")).SendKeys(Open.QA.Selenium.Keys.Enter);
        

        两种方法都可以

        【讨论】:

          猜你喜欢
          • 2013-10-04
          • 2017-02-02
          • 2020-04-22
          • 2015-08-18
          • 2020-09-23
          • 2017-12-25
          • 2020-04-13
          • 2017-02-21
          • 2021-12-03
          相关资源
          最近更新 更多