Selenium - 强制点击不可见元素

时间:2015-01-16 19:43:29

标签: c# selenium web automation .net-4.5

我正在使用C#Selenium.WebDriver.2.44.0 在某些第三方网站上,我正在尝试按下一个元素并获取此信息:

var myWebElement = Driver.FindElement(By.XPath("//a[.=' some value']            
myWebElement.Click();

我得到了元素,点击后我得到了这个:

{"element not visible\n  (Session info: chrome=39.0.2171.95)\n  (Driver info: chromedriver=2.9.248315,platform=Windows NT 6.1 SP1 x86_64)"}

在成功按下父菜单后,该项目在某个子菜单中显示。也可以放5秒睡觉,以确保手风琴很好看(在我的眼中很明显)。

问题 - 在第三方网站上如何强制点击此项?

4 个答案:

答案 0 :(得分:0)

您可以尝试使用driver.execute_script()更改z-index,将其置于顶部。

答案 1 :(得分:0)

您可以使用内置函数和WebDriver等待

var myWebElement = Driver.FindElement(By.XPath("//a[.=' some value']
WebDriverWait wait = new WebDriverWait(Driver.FindElement, TimeSpan.FromSeconds(10));
var element = wait.Until(ExpectedConditions.ElementIsVisible(myWebElement));

Actions action  = new Actions(Driver.FindElement);
action.MoveToElement(element).Perform();

myWebElement.Click();

答案 2 :(得分:0)

问题在于Selenium一个接一个地执行操作,但是在操作之间丢失了诸如“显示子菜单”之类的内容。

您可能不得不使用Actions链:

Actions action = new Actions(Driver);

action.MoveToElement(Driver.FindElement(By(ParentElementSelector)))
    .click()
    .MoveToElement(Driver.FindElement(By.XPath("//a[.=' some value'])))
    .click()
    .Build()
    .Perform();

这将移动到父元素,单击,然后移动到要查找的元素,然后单击。它将执行所有这些操作作为一个操作,应该能够单击子菜单元素。

答案 3 :(得分:-1)

当一个元素不可见时你可以试试这个......它对我有用

IWebElement WEHiddenID = driver.FindElement(By.Id(""));
WEHiddenID.SendKeys(OpenQA.Selenium.Keys.Enter);