C# 如何告诉代码在两个变量之间进行选择并使它们相等?

C# 如何告诉代码在两个变量之间进行选择并使它们相等?,c#,css,selenium,xpath,C#,Css,Selenium,Xpath,我正在进行单元测试,测试平台是一个动态网站,因此CSS选择器和xpath经常更改。所以我想也许我可以使用CSS和xpath来检索相同的文本 我现在面临的主要问题是如何告诉代码使两个检索到的字符串相等,比如,如果xpath失败,CSS选择器仍然可以工作,反之亦然 下面是一个简单的代码 string text1 = _driver.FindElement(By.XPath("xpathtext")).Text; string text2 = _driver.FindElement(By.CssSel

我正在进行单元测试,测试平台是一个动态网站,因此CSS选择器和xpath经常更改。所以我想也许我可以使用CSS和xpath来检索相同的文本

我现在面临的主要问题是如何告诉代码使两个检索到的字符串相等,比如,如果xpath失败,CSS选择器仍然可以工作,反之亦然

下面是一个简单的代码

string text1 = _driver.FindElement(By.XPath("xpathtext")).Text;
string text2 = _driver.FindElement(By.CssSelector("csstext")).Text;
text1 = text2;
//then use text1 or text2 
有什么干净整洁的方法吗

IWebElement element1 = driver.FindElementIfExists(By.XPath("xpathtext"));
IWebElement element2 = driver.FindElementIfExists(By.CssSelector("csstext"));

string value = (element1 != null ? element1.Text : (element2 != null ? element2.Text : null));
它依赖于FindElementIfExists扩展方法。这只是在项目中创建此类的问题:

public static class WebDriverExtensions
{        
    public static IWebElement FindElementIfExists(this IWebDriver driver, By by)
    {
        IWebElement result = null;

        try
        {
            result = driver.FindElement(by);
        }
        catch { }

        return result;
    }    
}

不一定更短或更干净,但可能更通用的是利用LINQ。我使用FindElement而不是
FindElement
,因为后者更好地用于您计划不查找元素的情况,因为它将返回一个空列表,而不是引发异常:

var driver = new ChromeDriver();
driver.Navigate().GoToUrl("http://stackoverflow.com/");

// setup an array with all needed
// By instances, you can mix and match
var byList = new [] { 
    By.CssSelector(".categories"),
    By.XPath("//body/noscript"),
    By.Id("sidebar"),
    By.ClassName("module")
};

// do a SelectMany and use FindElements
// instead of FindElement
// take the first
var match = (from byItem in byList 
             from elements in driver.FindElements(byItem)
             select elements).FirstOrDefault();

// if we have a null none of the 
// By operators did return an element
if (match != null)
{
    // do what ever you need to do if match is not null
} 
else 
{
    // none of your search terms was found
}

你的问题非常不清楚。但是听起来你在寻找一个
if
语句。好的,非常感谢你帮了我这么多。我一定会在我的工作中实现你的代码。