2013-06-20 55 views
0

我是新來硒的webdriver和有問題發現在谷歌搜索結果與硒的webdriver搜索文本在Chrome

我用Google搜索一些東西,結果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

你得到的異常,因爲一個連結文字定位會發現鏈接文本的精確匹配,所以它在尋找一個只包含文本的鏈接「硒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#,所以這裏的Python代碼,你應該明白吧):

    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.netselenium解決了此問題。這個對我有用。我希望這可能有助於參考。

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