c# - Selenium 查找指定元素内的元素

标签 c# selenium selenium-webdriver

当涉及到 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 元素,然后单击该选项。

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

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

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

期待伟大的解决方案。

最佳答案

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

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

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

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

关于c# - Selenium 查找指定元素内的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47496076/

相关文章:

c# - 在一段时间内更改按钮的颜色和文本

c# - 组行上的 DevExpress GridHitInfo

javascript - 使用 Selenium 在 IE10 中移动到元素

python - 如何关闭 Selenium 中的打印对话框?

c# - 使用 ComboBox 更改 CollectionViewSource 过滤器

c# - 从返回 View 模型的 Controller 操作加载 View 时为空字段

java - 使用 jsch - java 以 root 用户身份执行 bash 命令

java - Selenium Webdriver Java : Unable to perform click operation by Actions in Chrome

css - 如何找到 div 元素的深度标签的 xpaths?

Python:命令行参数的传递方式与硬编码行不同