2013-06-20 1 views
0

Я новичок в селен WebDriver и имеющая проблемынайти искомый текст в результатах поиска Google с селеном WebDriver в Chrome

я гугл что-то и результат appeared.now я хочу увидеть, если первые 5 результатов содержат поиск текста или нет.

как пример:

я хочу найти текст "селеном WebDriver". теперь я хочу проверить, содержит ли первые 5 результатов текст «selenium webdriver» или нет.

Вот моя часть:

chromeDriver.Navigate().GoToUrl("http://www.google.co.uk"); 

IWebElement searchText = chromeDriver.FindElement(By.XPath(".//html/body/div[3]/div/div/div[2]/div[2]/div/form/fieldset[2]/div/div/div/table/tbody/tr/td[2]/div/input")); 
searchText.SendKeys("selenium webdriver"); 

IWebElement searchButton = chromeDriver.FindElement(By.Name("btnG")); 
searchButton.Click() ; 

IWebElement resultingText = chromeDriver.FindElement(By.LinkText("selenium webdriver")); 

эта линия бросает исключение:

// IWebElement resultingText = chromeDriver.FindElement(By.LinkText("selenium webdriver")); 

может ли один помочь мне в этом вопросе?

+0

Ну какая ошибка? – Arran

+0

OpenQA.Selenium.NoSuchElementException: Элемент не найден – user2501321

+0

Вы хотите проверить, содержат ли первые 5 результатов «selenium webdriver» и что это? Что ты хочешь делать? Нажмите первый? – Arran

ответ

1

вы получаете исключение, потому что LinkText локатор найти точное соответствие текста ссылок, поэтому он ищет ссылку, которая содержит только текст «selenium webdriver». Если вы посмотрите на результат поиска Google, точного совпадения нет, так что вы получите исключение.

Этот код распечатает каждую ссылку, содержащуюся на первой странице результатов поиска. Здесь вы можете изменить это, чтобы проверить первые пять, чтобы увидеть, если он содержит текст, который соответствует вашим критериям:

IWebDriver driver = new ChromeDriver(); 
driver.Navigate().GoToUrl("http://google.com"); 

IWebElement element = driver.FindElement(By.Id("gbqfq")); 
element.SendKeys("selenium webdriver"); 

// Get the search results panel that contains the link for each result. 
IWebElement resultsPanel = driver.FindElement(By.Id("search")); 

// Get all the links only contained within the search result panel. 
ReadOnlyCollection<IWebElement> searchResults = resultsPanel.FindElements(By.XPath(".//a")); 

// Print the text for every link in the search results. 
foreach (IWebElement result in searchResults) 
{ 
    Console.WriteLine(result.Text); 
} 
+0

спасибо. Спасибо за попытку . он работает. :) @PocketDews – user2501321

+0

Огромное спасибо, что он отлично работает ... – Ewert

0
  1. Вы используете ужасный xpath. Попробуйте что-то вроде //input[@id='gbqfq']
  2. Когда вы ищете что-то текстом, то реестр чувствителен
  3. В вашем случае с 5 результатами, вы можете использовать следующее (я не знаком с C#, так вот код питона , вы должны понять):

    first_five = driver.find_elements_by_xpath(".//*[@id='rso']//div//h3/a")[:5]  
    #returns the list of first five result links 
    for result in first_five: 
        assert "selenium webriver" in result.text.lower(), "Result does not contain 'selenium webdriver'" 
        # lower - to get rid off registry troubles 
    
+0

@Petrovich спасибо за ур ответ :) – user2501321

0

Желательно и лучше использовать селектор CSS или, если вы готовы использовать только XPath. выберите «путь огня». который генерирует короткий и точный Xpath и помещает его в ваш код. не используйте такой длинный Xpath.

0

Я решил эту проблему, используя vb.net, selenium. Меня устраивает. Надеюсь, это может быть полезно для справки.

Imports OpenQA.Selenium' 
Module SearchResults 
Sub Main() 
    Try 
     Dim Browser As Chrome.ChromeDriver = New Chrome.ChromeDriver("C:\SeleniumLive\DriverFiles\") 
     Browser.Navigate.GoToUrl("https://www.google.co.in") 
     For i = 0 To 4 
      If Browser.FindElement(By.Id("lst-ib")) Is Nothing Then 
       Threading.Thread.Sleep(1000) 
      End If 
     Next 
     If Browser.FindElement(By.Id("lst-ib")) IsNot Nothing Then 
      Browser.FindElement(By.Id("lst-ib")).SendKeys("Sumit Shitole" & Keys.Enter) 
     End If 
     Threading.Thread.Sleep(3000) 
     For pageNumber As Integer = 1 To 8 Step 1 
      Console.WriteLine("......Result from page " & pageNumber & "..........") 
      Dim results As New List(Of IWebElement)(Browser.FindElements(By.CssSelector(".r>a"))) 
      For Each result As IWebElement In results 
       Console.WriteLine(result.Text) 
      Next 
      Browser.FindElement(By.Id("pnnext")).Click() 
      Threading.Thread.Sleep(3000) 
     Next 
     Console.ReadLine() 
     Browser.Close() 
    Catch ex As Exception 
     Console.WriteLine(ex.ToString) 
    End Try 
    Console.ReadKey() 
End Sub 
End Module 
Смежные вопросы