好的我正在Selenium Web Driver中编写一个简单的代码。它的作用是:
我使用的是Windows 8 - 64位和Visual Studio 2013.浏览器是Firefox。
这是我写的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.IE;
namespace WebDriverDemo
{
class Program
{
static void Main(string[] args)
{
IWebDriver driver = new FirefoxDriver();
driver.Url = "http://google.com";
var searchBox = driver.FindElement(By.Id("gbqfq"));
searchBox.SendKeys("abc");
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromMinutes(1));
var images = driver.FindElements(By.ClassName("q qs"))[0];
images.Click();
}
}
}
但是我在代码的第二行得到了一个例外。这是一个例外:
这是Inspect Element结果:
答案 0 :(得分:3)
异常消息准确告诉您问题所在。使用By.ClassName
时,不能使用多个或“复合”类名。单个类名称不能包含空格。如果要使用多个类名,请使用By.CssSelector
。
答案 1 :(得分:1)
而且,问题是复合类。目前selenium
不支持此功能。另一方面,您可以使用cssSelector
来避免此问题。
.q.qs
在每个课程之前注意.
,并查看与此问题相关的答案here
根据OP的更新完成代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.IE;
namespace WebDriverDemo
{
class Program
{
static void Main(string[] args)
{
IWebDriver driver = new FirefoxDriver();
driver.Url = "http://google.com";
var searchBox = driver.FindElement(By.Id("gbqfq"));
searchBox.SendKeys("abc");
//The following line is missing that is mandatory.
driver.FindElement(By.Name("btnG")).Click();
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromMinutes(1));
var images = driver.FindElements(By.CssSelector(".q.qs"))[0];
images.Click();
}
}
}
答案 2 :(得分:0)
使用CSSSelector:
var images = driver.findElement(By.cssSelector(".q.qs"));
images.Click();
使用LinkText:
var images = driver.findElement(By.linkText("Images"));
images.Click();
使用Xpath:
var images = driver.findElement(By.xpath(".//*[@class='q qs' and .='Images']"));
images.Click();