我是selenium webdriver的新手并且遇到问题
我google了一些东西,结果出现了。现在我想看看前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"));
任何人都可以帮我解决这个问题吗?
答案 0 :(得分: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);
}
答案 1 :(得分:0)
//input[@id='gbqfq']
对于你的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
答案 2 :(得分:0)
建议使用CSS选择器或者如果您愿意仅使用XPath。请选择“火道”。它生成简短而精确的Xpath并将其放在代码中。避免使用如此冗长的Xpath。
答案 3 :(得分: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