我设法打开一个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());
}
}
}
}
答案 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();