Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Selenium在指定元素中查找元素_C#_Selenium_Selenium Webdriver - Fatal编程技术网

C# Selenium在指定元素中查找元素

C# Selenium在指定元素中查找元素,c#,selenium,selenium-webdriver,C#,Selenium,Selenium Webdriver,谈到邢的团队,我在硒方面遇到了麻烦。到目前为止,我使用了两年多的解决方案不再有效;他们一定对HTML做了一些更改 main的问题是某个select元素没有打开(当试图通过单击打开它时),因此我无法访问“单击”或选择的选项。我看到一个小边框包围着下拉列表,好像它被点击了,但没有在第二位起作用。 现在我已经花了相当多的时间详细阐述了错误,我很确定这是因为相同的(意味着相同的属性,…)下拉列表存在于同一页面的另一个点上(按组排序/筛选帖子)。但是,我想选择一个新帖子提交到的(子)论坛,但这不起作用 很

谈到邢的团队,我在硒方面遇到了麻烦。到目前为止,我使用了两年多的解决方案不再有效;他们一定对HTML做了一些更改

main的问题是某个select元素没有打开(当试图通过单击打开它时),因此我无法访问“单击”或选择的选项。我看到一个小边框包围着下拉列表,好像它被点击了,但没有在第二位起作用。 现在我已经花了相当多的时间详细阐述了错误,我很确定这是因为相同的(意味着相同的属性,…)下拉列表存在于同一页面的另一个点上(按组排序/筛选帖子)。但是,我想选择一个新帖子提交到的(子)论坛,但这不起作用

很明显,我尝试了很多很多不同的事情,但都没有成功。我无法在这里列出我所有的尝试,因为它太多了,部分时间太长了。我试过的一些:

  • 通过各种方法(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元素,然后单击该选项

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

这正是与我的问题有关的<代码>值为空,只要未选择任何内容,一旦选择,论坛id就会插入到值中。我可以想象,如果没有任何JS阻止你在没有通过下拉选择子论坛的情况下提交表单


期待伟大的解决方案。

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

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

  • 等待列表变为可见。使用css选择器-
    “div[id='new-post-forum-select']>ul[class*='comm-navigation-dropdown']
    ”。使用元素IsVisible ExpectedCondition。尽管您可能需要或不需要此步骤,但已将其添加为检查

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


  • 这是行不通的。元素永远不可见(步骤2)。我从错误“Element not visible”(元素不可见)中得出结论,该错误是在我通过
    WebDriverWait
    删除可见性检查时发生的。