我有一个我无法在页面上找到的元素。
实际上,我无法在此页面上找到任何元素。
我已成功移至IFrame
,但无法找到任何元素。
Frmae的ID是:kendoIFrame
,其中一个我找不到的元素是:
<div class="k-widget k-splitter" id="divAll" style="visibility: visible; opacity: 1; touch-action: none;" data-role="splitter">
&#13;
我试图找到如下元素:
var wait = new WebDriverWait(_webdriver, new TimeSpan(0, 0, 30));
var Gisbutton = wait.Until(x => x.FindElement(By.Id("btnGis")));
Gisbutton.Click();
_webdriver.SwitchTo().Window(_webdriver.WindowHandles.ToList().Last());
new WebDriverWait(_webdriver, TimeSpan.FromMilliseconds(2000)).Until(ExpectedConditions.FrameToBeAvailableAndSwitchToIt("kendoIFrame"));
var element = _webdriver.FindElement(By.Id("divAll"));
看起来我可以切换到相框,因为我没有收到错误,但在尝试查找元素时,我收到以下错误:
OpenQA.Selenium.NoSuchElementException : Unable to find element with id == divAll
仅供参考,此特定html页面中只有一个IFrame。
答案 0 :(得分:0)
如果它在iframe中,则需要先切换到该iframe,然后再搜索。类似的东西:
driver.switchTo().frame(driver.findElement(By.name("iFrameTitle")));
答案 1 :(得分:0)
根据最佳做法,您应该在可用时切换到<iframe>
,然后尝试通过以下任一方法找到<iframe>
中的元素:
FrameToBeAvailableAndSwitchToIt Method (String)
:期望检查给定帧是否可以切换到。如果框架可用,则将给定的驱动程序切换到指定的框架。
FrameToBeAvailableAndSwitchToIt Method (By)
:期望检查给定帧是否可以切换到。如果帧可用,则将给定的驱动程序切换到指定的帧。
解决方案
您需要使用适当的等待切换到框架,然后按如下方式找到元素:
new WebDriverWait(driver, TimeSpan.FromMilliseconds(2000)).Until(ExpectedConditions.FrameToBeAvailableAndSwitchToIt("kendoIFrame"));
var element = driver.FindElement(By.CssSelector("div.k-widget.k-splitter#divAll"));
答案 2 :(得分:0)
You should switch to a <iframe>
first
driver.switchTo().Frame("iFrameName"); //switching the frame
Then try to find element
driver.findElement(By.xpath("ElementXPath")).click(); // To find element