Selenium Fluent WebDriver - Click无法按预期工作

时间:2015-06-29 08:48:39

标签: angularjs selenium selenium-webdriver integration-testing

我有一个分页列表,基本上是这样构造的(我使用的是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被选中。它似乎试图点击或选择错误的一个! (见图)。

enter image description here

发生了什么事?

2 个答案:

答案 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)"

不确定这是否能解决您的问题,但它是一个可以开始的地方。如果没有,请更新结果