【问题标题】:Selenium WebDriver with ASP.NET controls带有 ASP.NET 控件的 Selenium WebDriver
【发布时间】:2012-02-22 01:37:32
【问题描述】:

我正在尝试在使用 ASP.NET 创建的网页上查找元素。问题是 4.0 版之前的 ASP.NET 会为控件生成一些长名称,因此要找到一个简单的“用户名”输入字段,我需要使用其全名:

var elementName = "LoginControl1_uxLoginControl_UserName";
var username = Browser.TryFind(By.Name(elementName));

它似乎正在工作,但我正在寻找更简单的东西。是否可以使用部分元素名称或部分 ID 来做同样的事情?例如

var username = Browser.TryFind(By.CssSelector("UserName"));

这应该返回名称/ID 中包含“UserName”的所有元素(甚至是第一个元素)。

【问题讨论】:

标签: css selenium css-selectors


【解决方案1】:

您可以使用 xpath 来做到这一点,

var username = Browser.TryFind(By.Xpath("//*[contains( @name , 'UserName')] "));

如果可能的话,另一个选择是使用 css 选择器

【讨论】:

  • 使用 XPath 绝对是一个不错的选择。 @Oliver,“您现在仅限于标签类型”是什么意思?
  • 如果您查看 XPath,您现在正在选择名称中包含 UserName 的所有输入标记。在此之前,它们可以使用名称为 UserName 的任何 HTML 元素。抱歉没说清楚
  • @Oliver:您可以轻松地将input 替换为*,不是吗?
【解决方案2】:

尝试使用substring matching attribute selectors 之一:

var username = Browser.TryFind(By.CssSelector("[id$='UserName']"));

匹配 ID 以 UserName 结尾的任何元素。

【讨论】:

    猜你喜欢
    • 2020-12-21
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    相关资源
    最近更新 更多