【问题标题】:Selenium find elements within specified elementSelenium 在指定元素中查找元素
【发布时间】:2017-11-26 12:17:17
【问题描述】:

当涉及到 XING 的小组时,我遇到了 Selenium 的麻烦。到目前为止,我使用了两年多的解决方案不再起作用;他们一定改变了他们的 HTML。

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

我尝试了很多很多很多不同的方法,但显然都没有奏效。我无法在这里列出我所有的尝试,因为它太多了,而且部分时间太久了。我尝试过的一些方法:

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

现在这就是我的希望。我想了一种方法来选择 - 完全 - 这个下拉列表(而不是描述的另一个下拉列表)由子元素等等(这就是这个问题的标题的原因)。 这是 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 元素,然后单击该选项。

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

&lt;input type="hidden" name="post[forum_id]" id="post_forum_id" value=""&gt;

这与我的问题完全相关; value 是空的,只要没有选择任何内容,一旦选择,论坛的 id 就会插入到值中。我可以想象如果没有任何 JS 阻止您在没有实际通过下拉菜单选择子论坛的情况下提交表单。

期待出色的解决方案。

【问题讨论】:

    标签: c# selenium selenium-webdriver


    【解决方案1】:

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

    1. 使用 css 选择器 - "div[id='new-post-forum-select'] &gt; a[class='comm-navigation-trigger'] &gt; span" 查找 span。点击这个元素。

    2. 等待 列表 变得可见。使用 css 选择器 - "div[id='new-post-forum-select'] &gt; ul[class*='comm-navigation-dropdown']"。使用 ElementIsVisible ExpectedCondition。尽管您可能需要也可能不需要此步骤,但将其添加为检查。

    3. 找到具有所需值的链接 - "div[id='new-post-forum-select'] &gt; ul[class*='comm-navigation-dropdown'] a[class='comm-navigation-forum'][data-forum-name='Q &amp; A']"。点击这个。

    【讨论】:

    • 这不起作用。该元素永远不会变得可见(步骤 2)。我通过WebDriverWait 删除可见性检查时出现的错误“元素不可见”得出了这一结论。
    猜你喜欢
    • 2023-04-10
    • 2017-12-03
    • 2012-12-12
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    相关资源
    最近更新 更多