Selenium(Java)消息“无法定位元素”,但元素和XPath存在

uinbv5nw  于 2022-11-24  发布在  Java
关注(0)|答案(2)|浏览(166)

我是Selenium WebDriver的新手,使用NetBeans Java和Firebug for Firefox来获取XPath。
问题是,即使某些元素在浏览器中可见并可单击,并且Firebug找到了XPath表达式,我仍然会收到错误“Unable to locate element”。问题是,元素不在框架中(没有任何框架),不在另一个窗口中,它是可见并可单击的,并且具有清晰的XPath表达式。
我用了Wait和Thread.sleep,但是没有用。而且,我尝试了所有我能找到的关于Stack Overflow的解决方案,类似于这个问题。
元素位于表中,表中包含一些“div”元素。这是XPath表达式:

.//*[@id='NavigationRadPanelBar_i2_i0_trvStandardView']/ul/li[3]/div/span[3]

看起来面板是个问题,因为它也找不到面板。我尝试了同一个面板中的另一个元素,它有一个标题和文本:

driver.findElement(By.xpath("//*[contains(text(),'Technical Attributes')]")).click();

但我还是得到了同样的消息。类似的所有元素在这个面板和面板本身。它似乎无论我尝试,它无法定位。一切以外的这个面板是工作正常的驱动程序。
页面有一个左面板,这些元素位于其中。其中一些是可以展开的节点,一些只是链接,但什么都找不到。
元素明显存在且可见,但WebDriver仍然无法找到,原因可能是什么?
我试着定位主面板:

driver.findElement(By.xpath(".//*[@id='NavigationRadPane']")).click();

但仍然是相同的例外。
这是HTML内容的一部分(很长):

<div id="RAD_SLIDING_PANE_CONTENT_navigatiionRadSlidingPane" class="rspSlideContent" style="overflow: hidden; width: 200px; height: 579px;">
  <div id="NavigationRadPanelBarPanel" style="display: block;">
    <div id="NavigationRadPanelBar" class="RadPanelBar RadPanelBar_Office2007" postback="false" style="background-color:GhostWhite;height:100%;width:100%;">
      <ul class="rpRootGroup">
        <li class="rpItem rpFirst">
          <li class="rpItem">
            <li class="rpItem rpLast">
              <a class="rpLink rpExpandable rpExpanded" href="#">
                <div class="rpSlide" style="display:block;">
                  <ul class="rpGroup rpLevel1 111460" style="display: block; height: 274.731px; width: 100%;">
                    <li class="rpItem rpFirst rpLast">
                      <div class="rpTemplate">
                        <div id="NavigationRadPanelBar_i2_i0_trvStandardView" class="RadTreeView RadTreeView_Office2007">
                          <ul class="rtUL rtLines">
                            <li class="rtLI rtFirst">
                              <li class="rtLI">
                                <li class="rtLI">
                                  <div class="rtMid">
                                    <span class="rtSp" />
                                    <span class="rtPlus rtPlusHover" />
                                    <img class="rtImg" src="..." alt="Technical Attributes" />
                                    <span class="rtIn" title="Technical Attributes">Technical Attributes</span>
                                  </div>
                                  <ul class="rtUL" style="display:none;">
                                </li>
                                <li class="rtLI rtLast">
zaq34kh6

zaq34kh61#

用途:

driver.switchTo().activeElement();

这样,驱动程序将切换到您单击的面板。然后您可以在该面板中执行您想要的其余操作。

zaq34kh6

zaq34kh62#

以下是您问题的答案:
这个错误说明了一切,Unable to locate element,因为XPath表达式对我来说似乎不正确。
如果要单击将 title 设置为 Technical Attributes 的元素,可以考虑尝试使用以下XPath表达式:

//div[@id='NavigationRadPanelBar_i2_i0_trvStandardView']/ul/li/li/li/div/span[@class='rtIn']

//div[@id='NavigationRadPanelBar_i2_i0_trvStandardView']/ul/li/li/li/div/span[@title='Technical Attributes']

相关问题