C# 将SelectByText(部分)与C Selenium WebDriver绑定一起使用似乎不起作用
我使用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
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元素调用它