C# 如何告诉代码在两个变量之间进行选择并使它们相等?
我正在进行单元测试,测试平台是一个动态网站,因此CSS选择器和xpath经常更改。所以我想也许我可以使用CSS和xpath来检索相同的文本 我现在面临的主要问题是如何告诉代码使两个检索到的字符串相等,比如,如果xpath失败,CSS选择器仍然可以工作,反之亦然 下面是一个简单的代码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
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
语句。好的,非常感谢你帮了我这么多。我一定会在我的工作中实现你的代码。