webdriver(c#) - 从特定的UL标记名中断言文本

时间:2014-11-10 10:26:36

标签: selenium selenium-webdriver webdriver

我试图断言我网页中的特定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"));

1 个答案:

答案 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属性等于你需要的属性。