【问题标题】:How to locate the input box using C# Selenium如何使用 C# Selenium 定位输入框
【发布时间】:2019-10-20 18:27:26
【问题描述】:

我需要在这个 HTML 中找到输入框:

<div id="employeesDataTable_filter" class="dataTables_filter">
<label>
<input type="search" class="form-control input-sm"
placeholder="Filter..." aria-controls="employeesDataTable">
</label>
</div>

但是为了我的生活不能 - 请帮助,

我已经成功编写了许多测试包,并发现了许多不同类型的页面元素,但这个让我很难过。

我对此很陌生,并尝试过

By ExecutiveSearchBox = By.XPath("//input[@type='search' and 
    class='dataTables_filter']");

【问题讨论】:

  • 我认为contains(@class, 'dataTables_filter') 可以解决问题

标签: c# selenium-webdriver xpath css-selectors webdriverwait


【解决方案1】:

您遇到了问题,因为您选择的是 input 节点上的 class 属性,而不是 div。试试下面的选择器:

//div[@class='dataTables_filter']//input[@type='search']

正如@Marco Forberg 提到的,如果为元素提供了多个类,最好使用contain() XPath 函数:

//div[contains(@class, 'dataTables_filter')]//input[@type='search']

希望对解决您的问题有所帮助:)

【讨论】:

    【解决方案2】:

    要在你的 html sn-p 中找到输入元素,你只需使用

    FindElement( By.CssSelector( "input" ) )

    但请注意:

    • 页面加载完成后输入框并不总是可编辑的,可能需要一些时间。如果您想向该框发送数据,最好等到该框变为可编辑状态。
    • 输入框并不总是立即出现在 DOM 中。对于像 Angular 这样的现代 UI,它可能不会立即出现,可能会在一段时间内变成其他东西,然后才成为输入字段等。同样在这里,使用 Seleniums 等待功能肯定是一个好主意。

    我总是等待我期望的 DOM 状态,只有在状态未达到的一段时间后,我才会抛出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-04
      • 2020-12-26
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 2020-06-09
      • 2013-05-05
      • 1970-01-01
      相关资源
      最近更新 更多