我使用通过可见文本从列表框中完美选择项目的代码。
var selectElement = new SelectElement(TestFramework.FindWebElement(this));
selectElement.SelectByText(text);
问题是我已经动态更改了项目中的文本。它可能是这样的:
-- item1 -- 或 --- item1 ---
但我需要选择文本包含“item1”的项目。有什么建议么?
我使用通过可见文本从列表框中完美选择项目的代码。
var selectElement = new SelectElement(TestFramework.FindWebElement(this));
selectElement.SelectByText(text);
问题是我已经动态更改了项目中的文本。它可能是这样的:
-- item1 -- 或 --- item1 ---
但我需要选择文本包含“item1”的项目。有什么建议么?
查看源代码,如果第一次搜索(直接匹配)没有返回任何内容,该SelectByText
方法应该去搜索匹配项。如果它没有这样做,请向 Selenium 开发人员提出一个错误并同时编写您自己的扩展方法:contains
Equals
/// <summary>
/// Select an option by first searching for a case insensitive direct match then trying a case insenstive contains match.
/// </summary>
/// <param name="selectElement">The SelectElement to use.</param>
/// <param name="searchText">The text to find in the options.</param>
public static void SelectByText(this SelectElement selectElement, string searchText)
{
var allOptionsThatHaveText =
selectElement.Options.Where(se => se.Text.Equals(searchText, StringComparison.OrdinalIgnoreCase));
if (allOptionsThatHaveText.Any())
{
foreach (var option in allOptionsThatHaveText)
{
option.Click();
}
return;
}
var optionWithText = selectElement.Options.Where(option => option.Text.IndexOf(searchText, StringComparison.OrdinalIgnoreCase) >= 0);
if (optionWithText.Any())
{
foreach (var option in optionWithText)
{
option.Click();
}
return;
}
throw new NoSuchElementException(string.Format("Cannot find the text: {0} by either a case insenstive match or a case insensitive equals match.", searchText));
}
您可以使用 XPath 代替 SelectByText 并在 XPath 中使用“包含”。
这是一个例子:
var selectElement = new SelectElement(_driver.FindElement(By.XPath("//*[contains(text(), 'YOUTEXTHERE')]")));
尝试使用以下代码:-
var option = new SelectElement(browser.FindElement(By.CssSelector("#Menu_ParentMenuID"))).SelectBySubText("item1");