IllegalLocatorException - Selenium Web 驱动程序

IllegalLocatorException - Selenium Web Driver

好的,我正在用 Selenium Web 驱动程序编写一个简单的代码。它的作用是:

  1. 打开URLGoogle.com
  2. 在搜索栏中输入 'abc'
  3. 单击图像选项卡

我正在使用 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();