Selenium在指定元素中查找元素

时间:2017-11-26 12:17:17

标签: c# selenium selenium-webdriver

在涉及XING的小组时,我遇到了Selenium的麻烦。我在这个日期使用了两年多的解决方案已不再适用了;他们肯定已经改变了他们的HTML。

主要问题是某个选择元素没有打开(当试图通过点击打开它时)我因此无法访问选项"点击&#34 ;或者选择。我看到一个小边框包含下拉,好像它被点击但没有在第二位起作用。 现在我已经花了很长时间来详细说明错误,我很确定这是因为 相同的 (意思是相同的属性,。 ..)下拉存在于另一个点的同一页面上(对按组显示的帖子进行排序/过滤)。但是,我想选择提交新帖子的(子)论坛,这不起作用。

很明显,我尝试了很多很多不同的东西。我无法列出我在这里的所有尝试,因为它太多而且部分地在很久以前。我试过的一些内容:

  • 通过各种方法选择下拉列表(CSS Selector,类名,XPath,...)
  • 直接访问下拉列表的所需选项(通过CSS Selector,类名,XPath;甚至尝试收集所有元素的数组,并通过索引选择正确的数组,也没有工作)
  • 直接通过JavaScript访问下拉菜单所需的选项,然后点击'它由JS

现在这是我的希望。我想到了一种方法来选择-exactly-这个下拉(而不是其他描述的)子元素等等(这就是这个问题标题的原因)。  这是HTML:

<div class="comm-navigation forum-select is-open" id="new-post-forum-select" data-is-open="true">
  <a href="#" class="comm-navigation-trigger">
      <span class="comm-navigation-name" title="Select forum">Select forum</span>
    <i class="comm-navigation-icn-closed foundation-icon-shape-arrow-down"></i>
    <i class="comm-navigation-icn-open foundation-icon-shape-arrow-up"></i>
  </a>

  <ul class="comm-navigation-dropdown hidden" style="width: 519px; display: block;">
      <li class="comm-navigation-group forum-list">
        <ul>
              <li class="comm-navigation-item">
                <a href="/communities/forums/100941274" class="comm-navigation-forum" data-forum-id="100941274" data-forum-name="Members" title="Members">
                  Members
                </a>
              </li>
              <li class="comm-navigation-item">
                <a href="/communities/forums/100941276" class="comm-navigation-forum" data-forum-id="100941276" data-forum-name="Q &amp; A" title="Q &amp; A">
                  Q &amp; A
                </a>
              </li>
              <li class="comm-navigation-item">
                <a href="/communities/forums/100941275" class="comm-navigation-forum" data-forum-id="100941275" data-forum-name="Feedback" title="Feedback">
                  Feedback
                </a>
              </li>
        </ul>
      </li>
  </ul>
    <input type="hidden" name="post[forum_id]" id="post_forum_id" value="">
</div>

我想过可能会从comm-navigation forum-select is-open(在没有is-open的情况下仍然关闭时)到内部元素以获取正确的Chrome元素,然后点击该选项。

另外,我发现有一个隐藏的字段:

<input type="hidden" name="post[forum_id]" id="post_forum_id" value="">

这与我的问题完全相关;只要未选择任何内容,value就会为空,只要选中,论坛的ID就会被插入到值中。我可以想象,如果没有任何JS阻止您提交表单而没有通过下拉列表实际选择子论坛。

期待很好的解决方案。

1 个答案:

答案 0 :(得分:0)

如果我理解了这个问题,那么首先您需要点击第一个链接 (class=comm-navigation-trigger)内的范围,并选择“选择论坛”文字。这使得下方的“ul”可见。现在,您需要点击此列表中所需的“li”如果有,请继续阅读。

  1. 使用css选择器"div[id='new-post-forum-select'] > a[class='comm-navigation-trigger'] > span"找到 span 。单击此元素。

  2. 等待列表变为可见。使用css选择器 - "div[id='new-post-forum-select'] > ul[class*='comm-navigation-dropdown']“。使用ElementIsVisible ExpectedCondition。虽然您可能需要或不需要此步骤,但请将其添加为支票。

  3. 找到包含所需值的链接 - "div[id='new-post-forum-select'] > ul[class*='comm-navigation-dropdown'] a[class='comm-navigation-forum'][data-forum-name='Q & A']"。点击此处。