C# Selenium-强制单击不可见元素

C# Selenium-强制单击不可见元素,c#,selenium,web,automation,.net-4.5,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: chromed

我正在使用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)"}
我得到元素,点击我得到:

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秒钟,确保手风琴在我眼中清晰可见


问题-在第三方网站上,我如何强制单击此项目?

您可以尝试通过使用driver.execute_脚本更改z-index将其置于顶部。

您可以尝试通过使用driver.execute_脚本更改z-index将其置于顶部。

您可以使用内置函数和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();

您可以使用内置函数和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();

问题是Selenium会一个接一个地执行操作,但在操作之间会丢失类似于显示子菜单的内容

您可能需要为此使用操作链:

Actions action = new Actions(Driver);

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

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

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

您可能需要为此使用操作链:

Actions action = new Actions(Driver);

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

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

当一个元素不可见时,您可以尝试此操作……它对我有效

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

当一个元素不可见时,你可以试试这个…它适合我

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

可能重复的问题可能重复的问题与您回答的不可见元素相关,将失败var element=wait.UntilExpectedConditions.element isVisibleMyWebElement;问题与您回答的不可见元素相关,将失败var element=wait.UntilExpectedConditions.ElementIsVisiblemyWebElement;嗯,差不多了-它做了手风琴的事情,现在看到了第二个项目-但没有做第二次点击-但是没有引发异常…如果你链接到第三方网站,我可以稍后查看,可能会想出一个解决方案。嗯,几乎就在那里-它做了手风琴的事情,现在看到了第二个项目-但没有做第二次点击-但是没有引发异常…如果你链接到第三方网站,我可以稍后查看,并可能提出解决方案。