C#Selenium webdriver中的鼠标悬停操作

时间:2015-12-07 11:33:54

标签: c#-4.0 selenium-webdriver

我是C#Selenium的新手。我试图自动化“登录”和“退出”LinkedIn应用程序。为此,我写了下面的代码,

这里的“退出”是一个隐藏的元素。

我的代码

IWebDriver driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.linkedin.com/");
driver.Manage().Window.Maximize();
driver.FindElement(By.Id("login-email")).SendKeys("valid email ID");
driver.FindElement(By.Id("login-password")).SendKeys("valid password");
driver.FindElement(By.Name("submit")).Click();
Actions action = new Actions(driver);
action.MoveToElement(driver.FindElement(By.XPath("//*[@id='img-defer-id-1-6775']"))).Build().Perform(); // Getting an exception here
Thread.Sleep(3000);
driver.FindElement(By.XPath("//*[@id='account-sub-nav']/div/div[2]/ul/li[1]/div/span/span[3]/a")).Click();

但是我得到了“没有这样的元素例外”。即使我试图通过ID找到元素,但得到相同的异常。不确定我做错了什么。

任何人都可以帮助我。

3 个答案:

答案 0 :(得分:4)

Hoverable elements我发现使用JavaScript是最好的。 Action Builder往往具有较高的失败率,并且会导致其他可隐藏元素在滚动页面时变得可见,从而导致您想要隐藏的元素变得模糊。我已经在网上找到了这种方法(不记得在哪里),并且它比我尝试过的任何其他方法都要好得多。

String javaScript = "var evObj = document.createEvent('MouseEvents');" +
                "evObj.initMouseEvent(\"mouseover\",true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);" +
                "arguments[0].dispatchEvent(evObj);";


IJavaScriptExecutor executor = driver as IJavaScriptExecutor;
executor.ExecuteScript(javaScript, webElement);

答案 1 :(得分:2)

单击“提交”按钮后尝试添加Thread.sleep。 这里的问题是selenium驱动程序甚至在页面加载之前都在搜索元素。没有找到Hence元素的异常。

代替代码中的Thread.sleep,您可以使用显式等待。

试试这个

IWebDriver driver = new ChromeDriver();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60));
driver.Navigate().GoToUrl("https://www.linkedin.com/");
driver.Manage().Window.Maximize();
driver.FindElement(By.Id("login-email")).SendKeys("valid email ID");
driver.FindElement(By.Id("login-password")).SendKeys("valid password");
driver.FindElement(By.Name("submit")).Click();
Actions action = new Actions(driver);
wait.Until(ExpectedConditions.ElementIsVisible(By.XPath("//*[@id='img-defer-id-1-6775']")));
action.MoveToElement(driver.FindElement(By.XPath("//*[@id='img-defer-id-1-6775']"))).Build().Perform(); 
 wait.Until(ExpectedConditions.ElementIsClickable(By.XPath("//*[@id='account-sub-nav']/div/div[2]/ul/li[1]/div/span/span[3]/a"))).Click();

答案 2 :(得分:-1)

如果您尝试点击的元素不可见,您可以通过JavaScript将其显示,然后点击它:

((IJavaScriptExecutor)Driver).ExecuteScript("THE ELEMENT YOU WANT TO CLICK.hidden = false;", element);
element.click