IllegalLocatorException - Selenium Web 驱动程序
IllegalLocatorException - Selenium Web Driver
好的,我正在用 Selenium Web 驱动程序编写一个简单的代码。它的作用是:
- 打开URLGoogle.com
- 在搜索栏中输入 'abc'
- 单击图像选项卡
我正在使用 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();
}
}
}
但是我在代码的倒数第二行遇到异常。这是例外情况:
这是检查元素的结果:
而且,这个问题很复杂 class。目前 selenium
不支持此功能。另一方面,您可以使用 cssSelector
来避免此问题。
.q.qs
在每个 class 之前注意 .
并查看我与此问题相关的回答 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();
}
}
}
异常消息会准确告诉您问题所在。使用 By.ClassName
时不能使用多个或 "compound," class 名称。单个 class 名称不能包含 space。如果要使用多个 class 名称,请使用 By.CssSelector
.
使用 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();
好的,我正在用 Selenium Web 驱动程序编写一个简单的代码。它的作用是:
- 打开URLGoogle.com
- 在搜索栏中输入 'abc'
- 单击图像选项卡
我正在使用 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();
}
}
}
但是我在代码的倒数第二行遇到异常。这是例外情况:
这是检查元素的结果:
而且,这个问题很复杂 class。目前 selenium
不支持此功能。另一方面,您可以使用 cssSelector
来避免此问题。
.q.qs
在每个 class 之前注意 .
并查看我与此问题相关的回答 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();
}
}
}
异常消息会准确告诉您问题所在。使用 By.ClassName
时不能使用多个或 "compound," class 名称。单个 class 名称不能包含 space。如果要使用多个 class 名称,请使用 By.CssSelector
.
使用 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();