【问题标题】:Finding HTML elements to use in Selenium WebDriver查找要在 Selenium WebDriver 中使用的 HTML 元素
【发布时间】:2012-03-15 13:19:16
【问题描述】:

在 java 类中使用 Selenium WebDriver,我尝试找到该特定元素,然后在输入字段中自动添加所需数量的该元素。

我有一个 HTML 表格,每行指定一种元素类型和一个输入字段,用于将 X 添加到特定行中的元素数量。

<tr>
  <td class="non-sortable-table">
    <input class="required text" type="text" value="0" name="plate_order{pageFlow.plateorders[0].numberOfPlates}" tabindex="25">
  </td>
  <td class="non-sortable-table">
    <span>20% - White plates</span>
  </td>
  ...
</tr>

为了获得该元素,我在 Java 代码中尝试了以下操作,但没有成功:

WebElement element = (WebElement) js.executeScript("return ${\"document.getElementsByName('plate_order{pageFlow.plateorders[0].numberOfPlates}')\"");

WebElement element = driver.findElement(By.ByName('plate_order{pageFlow.plateorders[0].numberOfPlates}'))

我如何检索该元素以编辑其输入? 当元素名称的一部分是对控制器的引用时是否可能,即 pageFlow?

如果我想检索由 20% 标识的以下元素...。

我尝试使用 xpath 和 cssSelector 来获得那个,但没有成功。 有什么建议吗?

【问题讨论】:

  • "//tr/td[@class='non-sortable-table'][2]/span"

标签: java javascript xpath selenium-rc selenium-webdriver


【解决方案1】:

要从 JavaScript 结果返回元素,可以使用以下语法(我使用 jQuery 作为简化):

RenderedWebElement webElement = (RenderedWebElement) ((JavascriptExecutor) webDriver).executeScript("return jQuery('input[name^=plate_order]').get(0);");

你也可以传递一个之前在 Selenium 中选择的元素:

((JavascriptExecutor) webDriver).executeScript("return doSomethingWithElement(arguments[0]);", webElement);

【讨论】:

    【解决方案2】:

    在我看来,您可能想在 XPath 或 CSS 中使用起始类型运算符。

    类似:

    XPath: //input[starts-with(@name, 'plate_order')]
    CSS: input[name^='plate_order']
    

    类似的事情也应该适用于跨度(如果你知道文本):

    XPath: //span[starts-with(., '20%')]
    CSS/Sizzle*: span:contains('20%')
    

    如果你不知道文本,那么这个 xpath 可能会起作用。

    XPath: //input[starts-with(@name, 'plate_order]/../../td/span
    

    * 包含函数不是纯 CSS。这是 Sizzle 库提供的附加功能。这可能有效也可能无效,具体取决于 Selenium 是使用内置 CSS 库还是注入 Sizzle。

    【讨论】:

    • 优雅,入手正是我在这里所需要的。尽管如此,我还是选择使用String[] elements = driver.findElement(By.xpath("//table/tbody")).getText().split("\\n");,因为它的getText 会简单地返回表tbody 中每个元素的字符串。然后,我使用每一行来确定下了哪些订单。
    • Andy Tinkham 的回答很好地涵盖了 xpath 的编写。谢谢安迪。我已经学会了当标签没有 id 或 name 时如何编写 xpath。 //span[starts-with(., '20%')] : 这对我很有帮助
    猜你喜欢
    • 2017-09-12
    • 2017-07-03
    • 2014-07-18
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    相关资源
    最近更新 更多