我试图断言我网页中的特定UL标签包含某些文字。我不知道如何得到一个类中的第三个UL标签,然后断言它的文本。以下是我的网页上的HTML代码示例:
<td class="def"><ul>
<li>1 -- test 1</li>
<li>2 -- test 2</li>
<li>3 -- test 3</li>
<li>4 -- test four</li>
</ul></td>
我采取了一种不同的(也可能是天真的)方法来实现这一点,但它对我来说并不是非常理想 - 而且我只是这样做,因为我不知道如何让它按照我的方式运行想。我断言“def”类的外部html中的文本长度包含一个特定的计数:
(来自记忆)
String Def = utility.driver.findelement(By.ClassName("def").GetAttribute.("outerHTML");
int Length = Def.Length;
Assert.IsTrue(Length.equals("36"));
答案 0 :(得分:1)
您可以使用与文本匹配的XPath选择器直接找到该元素(下面的示例选择器,未经测试):
//td[contains(@class, 'def')]//ul/li[text()='4 -- test four')]
(找到包含td
class
def
的{{1}},获取其下方的ul
,并获取下面的li
还的text
4 -- test four
}
您还可以利用C#中LINQ的强大功能为您做一些腿部工作。你缺少的是找到给定元素的子元素。这是通过链接.FindElement
命令来完成的:
Driver.FindElement(By.ClassName("def")).FindElement(By.TagName("ul"));
以上内容将获得第一个ul
元素,该元素是示例中td
元素的直接子元素。 WebDriver将能够找出孩子和孩子。你的父母关系。
所以,为了更好地处理你的情况,这就是你将如何做到这一点。
Driver.FindElement(By.ClassName("def"));
获取我们想要的table
。
Driver.FindElement(By.ClassName("def")).FindElement(By.TagName("ul"));
获取ul
我们想要的table
的直接孩子。
Driver.FindElement(By.ClassName("def")).FindElement(By.TagName("ul")).FindElements(By.TagName("li"));
获取li
的{{1}}个元素。请注意ul
(额外的s!)
FindElements
由于返回了Driver.FindElement(By.ClassName("def")).FindElement(By.TagName("ul")).FindElements(By.TagName("li")).First(i => i.Text.Equals("4 -- test four"));
,LINQ可以接受并返回第一个IList
属性等于你需要的属性。