用硒点击Google搜索按钮

时间:2019-07-03 03:43:57

标签: c# selenium webdriver selenium-chromedriver

我正在学习硒,但似乎无法单击它的Google搜索按钮。 我在尝试什么:

        IWebDriver driver = new ChromeDriver();
        driver.Url = "https://google.com";
        IWebElement searchBar = driver.FindElement(By.Name("q"));
        searchBar.SendKeys("Hello world!");
        IWebElement searchButton = driver.FindElement(By.Name("btnK"));
        searchButton.Click();

它会用Hello World正确填充搜索栏,但单击按钮时会出现例外: OpenQA.Selenium.ElementNotInteractableException:'元素不可交互

3 个答案:

答案 0 :(得分:0)

在学习时,我认为这对您来说是一个很好的练习,您可以使用findElements然后与列表项进行交互。

我可以给你一个主意,然后你必须自己实现它,这将给你更多的信息,而不仅仅是获得答案。

您必须使用findElements而不是findElement,因为有两个元素具有完全相同的name属性值。

 driver.FindElements(By.Name("btnK")) 

这将为您提供元素列表。然后检查尺寸是否为2。 现在,单击第二个元素。

或者您也可以使用JavaScript单击原始帖子中的searchButton

答案 1 :(得分:0)

最简单的方法就是像这样调用IWebElement.Submit()方法:

searchBar.Submit();

我会建议使用Explicit Wait,以便您可以确保元素存在于DOM中,并且可以使用WebDriverWaitExpectedConditions类组合来单击:

driver.Navigate().GoToUrl("http://google.com");
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
IWebElement searchBar = wait.Until(ExpectedConditions.ElementToBeClickable(By.Name("q")));
searchBar.SendKeys("Hello world!");
IWebElement searchButton = wait.Until(ExpectedConditions.ElementToBeClickable(By.Name("btnK")));
searchButton.Click();
driver.Quit();

更多信息:How to use Selenium to test web applications using AJAX technology

答案 2 :(得分:0)

尝试使用xpath

对我有用

        string searchBox="/html/body/div/div[3]/form/div[2]/div/div[1]/div/div[1]/input";
        string searchBtn="/html/body/div/div[3]/form/div[2]/div/div[3]/center/input[1]";
        IWebDriver driver = new ChromeDriver();
        driver.Url = "https://google.com";
        IWebElement searchBar = driver.FindElement(By.Path(searchBox));
        searchBar.SendKeys("Hello world!");
        IWebElement searchButton = driver.FindElement(By.XPath(searchBtn));
        searchButton.Click();

如果xpath不适合您,请让我知道