将SelectByText(部分)与C# Selenium WebDriver绑定一起使用似乎不起作用
本文关键字:一起 绑定 不起作用 WebDriver Selenium SelectByText 部分 | 更新日期: 2023-09-27 18:31:01
我正在使用C#中的Selenium WebDriver Extensions通过部分文本值从选择列表中选择一个值(实际前面有一个空格)。我无法使用部分文本匹配使其工作。我做错了什么还是这是一个错误?
可重现的示例:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Support.UI;
namespace AutomatedTests
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var driver = new FirefoxDriver();
driver.Navigate().GoToUrl("http://code.google.com/p/selenium/downloads/list");
var selectList = new SelectElement(driver.FindElement(By.Id("can")));
selectList.SelectByText("Featured downloads");
Assert.AreEqual(" Featured downloads", selectList.SelectedOption.Text);
selectList.SelectByValue("4");
Assert.AreEqual("Deprecated downloads", selectList.SelectedOption.Text);
driver.Quit();
}
}
}
提供错误: OpenQA.Selenium.NoSuchElementException: Cannot locate element with text: Featured downloads
SelectByText 方法
被破坏了,所以我编写了自己的扩展方法,称为 SelectBySubText 来做它应该做的事情。
using System.Linq;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;
namespace AutomatedTests.Extensions
{
public static class WebElementExtensions
{
public static void SelectBySubText(this SelectElement me, string subText)
{
foreach (var option in me.Options.Where(option => option.Text.Contains(subText)))
{
option.Click();
return;
}
me.SelectByText(subText);
}
}
如果您可以在简单的HTML页面中重现该问题,则绝对应该提交错误报告。
查看源代码SelectByText
首先执行以下操作:
FindElements(By.XPath(".//option[normalize-space(.) = " + EscapeQuotes(text) + "]"))
如果它没有找到任何东西,那么这样做:
string substringWithoutSpace = GetLongestSubstringWithoutSpace(text);
FindElements(By.XPath(".//option[contains(., " + EscapeQuotes(substringWithoutSpace) + ")]"))
所以理论上它应该有效。您也可以自己使用XPath,看看是否可以让它在您的案例中工作。