C# Watin Find.ByText with Regex
本文关键字:with Regex ByText Find Watin | 更新日期: 2023-09-27 18:20:17
我遇到以下问题:我正在尝试使用Watin的Find.ByText从网页中获取元素。但是,我在C#中没有使用regex。
此语句将返回所需的元素。
return this.Document.Element(Find.ByText("781|262"));
当我尝试使用regex时,我会返回整个页面。
return this.Document.Element(Find.ByText(new Regex(@"781'|262")));
我正在尝试获得这个元素:
<td>781|262</td>
我也试过
return this.Document.Element(Find.ByText(Predicate));
private bool Predicate(string s)
{
return s.Equals("781|262");
}
上面的工作,而这不是:
private bool Predicate(string s)
{
return new Regex(@"781'|262").IsMatch(s);
}
我现在意识到,在谓词s中是整个页面的内容。我想问题出在Document.Element上。感谢您的帮助。
尝试使用:
return this.Document.Element(Find.ByText(new Regex("781''|262")));
或
return this.Document.Element(Find.ByText(new Regex("781|262")));
选择一个适合你需要的,我不知道"''"这个字符对你来说是否重要。
您不需要字符串是逐字逐句的字符串来实例化regex类。
嗯,我没有意识到Regex也会匹配body/html元素,因为模式显然也包含在其中。我必须通过使用^和$指定文本必须以模式开头和结尾,因此它只匹配所需的元素:
^781'u007c262$
''u007c匹配|,我使用了它,因为MSDN文档也这样做了。
最终代码:
<td>781|262</td>
return Document.TableCell(Find.ByText(new Regex(@"^'d{3}'|'d{3}$")));
Document.TableCell通过只在td元素上尝试Regex来加速搜索。
@用于防止C#将''解释为转义序列。
^用于仅将元素与以以下模式开头的文本相匹配''d{3}匹配didit 0-9 3次
''|匹配|字面意思为
''d{3}匹配数字0-9 3次
$元素也必须以这种模式结束