C# Selenium-强制单击不可见元素
我正在使用C Selenium.WebDriver.2.44.0 在某个第三方网站上,我试图按下一个元素并获得以下内容: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
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;嗯,差不多了-它做了手风琴的事情,现在看到了第二个项目-但没有做第二次点击-但是没有引发异常…如果你链接到第三方网站,我可以稍后查看,可能会想出一个解决方案。嗯,几乎就在那里-它做了手风琴的事情,现在看到了第二个项目-但没有做第二次点击-但是没有引发异常…如果你链接到第三方网站,我可以稍后查看,并可能提出解决方案。