【问题标题】:Selenium C# cannot find any element on page by Xpath, Id, nameSelenium C# 无法通过 Xpath、Id、名称在页面上找到任何元素
【发布时间】:2016-12-30 00:40:30
【问题描述】:

我对 Selenium 和 Visual Studio 很陌生。我创建了一个测试用例来简单地登录到网页并检查已登录页面上的元素。登录很好,我进入下一页但是我无法通过任何方法在下一页上找到任何元素,例如作为 XPath、ID 或名称。我收到以下类型的错误...

OpenQA.Selenium.NoSuchElementException : no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='lblApplicationVersion']"}

我还添加了一些不同的等待,例如...

new WebDriverWait(driver, TimeSpan.FromSeconds(30)).Until(ExpectedConditions.ElementExists((By.XPath("//*[@id='lblApplicationVersion']"))));

...但这只是等待整个持续时间,即使页面确实已加载。

chrome中的html元素如下...

<html>

<head>...</head>
<frameset border="0" framespacing="0" rows="100,89%" frameborder="0">
  <frame name="ob_frm_header" src="header.aspx" noresize="noresize" scrolling="no">
    #document
    <!DOCTYPE html>
    <html>

    <head>...</head>

    <body>
      <form method="post" action="./header.aspx" id="Form1">
        <div class="aspNetHidden">...</div>
        <script type="text/javascript">
          ...
        </script>
        <script type="text/javascript">
          ...
        </script>
        <script type="text/javascript">
          ...
        </script>
        <div id="header">
          <div id="header_left">
            <a id="OEMLogoLink" href="https://observatory.spikescavell.net/" target="_parent">...</a>
            <div id="application_version" class="statuspanel_application_version">
              <span id="lblApplicationVersion">v4.3.4</span>
            </div>
          </div>
          <div id="MainMenu1" onresize="MainMenuControls.MainMenuStrip.prototype.sizeChanged($get('MainMenu1'));" style="overflow: hidden; width: 1644px;" menuname="Observatory_Main" submenuleftoffset="201" submenuframe="ob_frm_main" submenuid="SubMenu1">
          </div>
          <div id="statuspanel">...</div>
        </div>
      </form>
    </body>

    </html>
  </frame>
  <frameset id="frmset_ob_menu_main" cols="201,81%" border="0" framespacing="0" frameborder="0">
    <noframes>...</noframes>
  </frameset>

</html>

【问题讨论】:

  • 通常情况下,我想我一发布就找到了答案!看起来我需要先将驱动程序切换到框架,即... driver.SwitchTo().Frame(frame name);
  • 是的,这就是问题所在,frame是单独的html文档

标签: c# selenium visual-studio-2012 xpath


【解决方案1】:

很高兴听到您这么说,您已经找到了解决方案,但您应该分享它作为答案,这就是为什么其他有相同问题的用户可以更好地理解实际问题的原因。

为此,我在这里写下您问题的解决方案。

实际上frameiframe 是单独的HTML 文档,因此您必须切换此frameiframe 以设置当前文档,然后才能在frame 或@987654327 中查找元素@ 如下:-

IWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));

wait.Until(ExpectedConditions.FrameToBeAvailableAndSwitchToIt("ob_frm_header"));

IWebElement element= wait.Until(ExpectedConditions.ElementExists(By.Id("lblApplicationVersion")));

或者,如果不需要实现WebDriverWait,可以简单地实现如下:-

driver.SwitchTo().Frame("ob_frm_header"); 
IWebElement element = driver.FindElement(By.id("lblApplicationVersion"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多