C# 将SelectByText(部分)与C Selenium WebDriver绑定一起使用似乎不起作用

C# 将SelectByText(部分)与C Selenium WebDriver绑定一起使用似乎不起作用,c#,.net,selenium,webdriver,selenium-webdriver,C#,.net,Selenium,Webdriver,Selenium Webdriver,我使用C中的Selenium WebDriver扩展从选择列表中选择一个值,该值由一个部分文本值组成,实际值前面有一个空格。我无法使用部分文本匹配使其工作。我是做错了什么还是这是一个错误 可复制示例: using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Firefox; using OpenQA.Selenium.Support.UI; namespac

我使用C中的Selenium WebDriver扩展从选择列表中选择一个值,该值由一个部分文本值组成,实际值前面有一个空格。我无法使用部分文本匹配使其工作。我是做错了什么还是这是一个错误

可复制示例:

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:无法找到带有文本的元素:特色下载

如果您可以在一个简单的HTML页面中重现问题,那么您肯定应该提交错误报告

查看SelectByText会首先执行以下操作:

FindElements(By.XPath(".//option[normalize-space(.) = " + EscapeQuotes(text) + "]"))
如果找不到任何东西,则执行以下操作:

string substringWithoutSpace = GetLongestSubstringWithoutSpace(text);
FindElements(By.XPath(".//option[contains(., " + EscapeQuotes(substringWithoutSpace) + ")]"))
所以从理论上讲,这应该是可行的。您也可以自己使用XPath,看看是否可以在您的案例中使用它。

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);
        }
    }

您尝试过SelectByText特色下载吗?我很确定没有任何绑定会从字符串中去除空白。是的,我已经尝试过了,并且它可以工作。但是根据方法文档,我想选择substring,这显然是该方法支持的。嗨,Alister,这是一个很好的扩展,正是我所寻找的。然而,这是我第一次使用Selenium扩展,我不知道如何称呼它。我是否希望看到它出现在像mySelect.SelectBySubTextsubText这样的VS中?@bearaman是的,一旦你有了类的using语句,你应该按照正常的方式从Select元素调用它