我有一个分页列表,基本上是这样构造的(我使用的是AngularJS):
<span id="latestResultsIndicator">
<ul>
<li ng-click="Item.action()"><span>1</span></li>
<li ng-click="Item.action()"><span>2</span></li>
</ul>
</span>
这在HTML中非常有用,但是当我尝试使用Selenium WebDriver和Fluent API编写集成测试时遇到问题。
具体来说,我想点击第二个li
,为此我使用以下代码
I.Assert.Exists("#latestResultsIndicator");
var secondPageElement = I.Find("#latestResultsIndicator ul li:nth-child(2)");
I.Click(secondPageElement);
这实际上并不奏效!如果我在Chrome控制台中使用jQuery来执行$("#latestResultsIndicator ul li:nth-child(2)").trigger("click")
,则会选择第二页,因此我知道选择器是正确的。
为了进一步测试,我添加了双击,如下所示:
I.DoubleClick(secondPageElement);
我在这里注意到,第一个li
被选中。它似乎试图点击或选择错误的一个! (见图)。
发生了什么事?
答案 0 :(得分:2)
我知道Webdriver与css伪选择器有一些问题,比如nth-child。您可能能够使用Xpath,这同样快速且灵活。
var webDriver = (IWebDriver)I.Provider;
webDriver.FindElement(By.XPath("//*[@id='latestResultsIndicator']//ul//li[2]")).Click();
不确定它是否可行,因为我没有使用过FluentAutomation。
答案 1 :(得分:0)
问题中写的CSS选择器不正确
"#latestResultsIndicator ul li:nth-child(2)"
UL拥有您正在寻找的ID,因此它应该是
"ul#latestResultsIndicator li:nth-child(2)"
不确定这是否能解决您的问题,但它是一个可以开始的地方。如果没有,请更新结果