Selenium C#无法找到ID或标题

时间:2014-11-19 21:33:55

标签: c# .net selenium

我设法打开一个firefox浏览器,转到http://www.google.com/搜索“Bath Fitter”。当我看到一堆链接时,我想要点击Google提供的顶级菜单中的一个项目,图片。图片位于地图视频新闻旁边... 我如何点击图片?

以下是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenQA.Selenium;   
using OpenQA.Selenium.Firefox;

namespace SeleniumHelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            IWebDriver driver = null;
            try
            {
                driver = new FirefoxDriver();
                driver.Navigate().GoToUrl("http://www.google.com/");
                driver.Manage().Window.Maximize();

                IWebElement searchInput = driver.FindElement(By.Id("gbqfq"));
                searchInput.SendKeys("Bath Fitter");
                searchInput.SendKeys(Keys.Enter);

                searchInput.FindElement(By.Name("Images"));
                searchInput.Click();
                driver.Close();

            }

            catch (Exception e)
            {
                Console.WriteLine("Exception ****" + e.ToString());

            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

更具体地说,您还可以编写从顶部导航指向的选择器。这是XPath。

.//*[@id='hdtb_msb']//a[.='Images']

试试这个;

driver.FindElement(By.XPath(".//*[@id='hdtb_msb']//a[.='Images']"));

修改 即使上面的选择器是正确的,你的代码也没有工作,因为第二页的加载时间太长。在那里,您需要等待元素处于就绪状态,并且需要隐式等待。更改try块中的代码并替换为我的,然后尝试

driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://www.google.com/");
driver.Manage().Window.Maximize();

IWebElement searchInput = driver.FindElement(By.Id("gbqfq"));
searchInput.SendKeys("Bath Fitter");
searchInput.SendKeys(Keys.Enter);

//this is the magic
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));
By byImage = By.XPath(".//*[@id='top_nav']//a[.='Images']");
IWebElement imagElement =
                    new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(ExpectedConditions.ElementExists(byImage));
imagElement.Click();

答案 1 :(得分:0)

尝试这样的事情......

IList<IWebElement> links = driver.FindElements(By.TagName("a"));
links.First(element => element.Text == "Images").Click();