我正在学习硒,但似乎无法单击它的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:'元素不可交互
答案 0 :(得分:0)
在学习时,我认为这对您来说是一个很好的练习,您可以使用findElements
然后与列表项进行交互。
我可以给你一个主意,然后你必须自己实现它,这将给你更多的信息,而不仅仅是获得答案。
您必须使用findElements
而不是findElement
,因为有两个元素具有完全相同的name
属性值。
driver.FindElements(By.Name("btnK"))
这将为您提供元素列表。然后检查尺寸是否为2。 现在,单击第二个元素。
或者您也可以使用JavaScript单击原始帖子中的searchButton
。
答案 1 :(得分:0)
最简单的方法就是像这样调用IWebElement.Submit()方法:
searchBar.Submit();
我会建议使用Explicit Wait,以便您可以确保元素存在于DOM中,并且可以使用WebDriverWait和ExpectedConditions类组合来单击:
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不适合您,请让我知道