2015-02-16 2 views
1

Хорошо, я пишу простой код в Selenium Web Driver. Что она делает это:IllegalLocatorException - Selenium Web Driver

  1. Открыть URL Google.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(); 

     } 
    } 
} 

Но я получаю исключение на второй последней строке кода. Вот исключение:

enter image description here

Вот Осмотреть результат Элемент:

enter image description here

+0

Не можете действительно видеть 'html' может обеспечить' html' не image – Saifur

+0

Извините, я не понял вашу точку зрения. – asma

+0

Окно 'exception' и' F12' настолько размыты, что не видно, что там. Однако, я думаю, я указал на вашу проблему в своем ответе. – Saifur

ответ

1

И этот вопрос является соединение класса. В настоящее время selenium этого не поддерживает. С другой стороны, вы можете использовать cssSelector, чтобы избежать этой проблемы.

.q.qs 

Примечание . перед каждым классом и увидеть мой ответ, связанные с этим вопросом here

Полный код согласно обновления параметров порядка:

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(); 

     } 
    } 
} 
3

Сообщение об исключении говорит вам именно то, что проблема является. При использовании By.ClassName вы не можете использовать множественные или «составные» имена классов. Одно имя класса не может содержать пробела. Если вы хотите использовать несколько имен классов, используйте By.CssSelector.

+0

Согласен. Похоже, общий вопрос – Saifur

+0

Но Google написал то же самое, что и class = 'q qa'. Скажите, пожалуйста, что везде, где у меня есть имя класса с пробелом, я должен использовать CSS Selector? – asma

+0

Я использовал эту строку кода: var images = driver.FindElement (By.CssSelector (". Q.qs")); и я получил это исключение: Необработанное исключение типа «OpenQA.Selenium.NoSuchElementException» произошло в WebDriver.dll. – asma

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(); 
+0

Используя первую строку кода, то есть используя CssSelector, я получил еще одно исключение: Необработанное исключение типа OpenQA.Selenium. NoSuchElementException "произошло в WebDriver.dll – asma

Смежные вопросы