【问题标题】:Finding the searched text in google search result with selenium webdriver in Chrome在 Chrome 中使用 selenium webdriver 在谷歌搜索结果中查找搜索到的文本
【发布时间】:2017-08-29 14:32:14
【问题描述】:

我是 selenium webdriver 的新手,遇到问题

我用谷歌搜索了一些东西,结果出现了。现在我想看看前 5 个结果是否包含搜索到的文本。

例如:

我想搜索文本“selenium 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"));

谁能帮我解决这个问题?

【问题讨论】:

  • OpenQA.Selenium.NoSuchElementException:找不到元素
  • 您想检查前 5 个结果是否包含“selenium webdriver”,是吗?你想让我做什么?点击第一个?
  • 点击五个中的任何一个。但首先应该检查它们是否包含文本。
  • 请帮忙。我不明白这段代码有什么问题
  • 发布屏幕截图和您打算点击的链接的 HTML。

标签: c# selenium automation webdriver selenium-webdriver


【解决方案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);
}

【讨论】:

  • 谢谢。感谢您的努力。它正在工作。:) @PocketDews
【解决方案2】:
  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
    

【讨论】:

    【解决方案3】:

    最好使用 CSS 选择器,或者如果您愿意只使用 XPath。请选择“火路”。它会生成简短而精确的 Xpath 并将其放置在您的代码中。避免使用如此冗长的 Xpath。

    【讨论】:

      【解决方案4】:

      我已经使用 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-23
        • 2020-11-23
        • 2012-04-10
        • 1970-01-01
        • 2012-09-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多