我看到一个奇怪的失败,因为无法选择一对jQuery ui标签的第二个标签。这适用于ChromeDriver,但使用PhantomJSDriver失败。
My PhantomJS版本:1.9.8
jQuery版本:1.10.2
jQuery ui版本:1.10.3
IDE:VS2012
您可以在此处找到我的网页副本:http://jsfiddle.net/anjw2gnr/1/
这是该页面的相关部分:
<div id="tabs">
<ul>
<li>
<a href="#tabs-1">Tab 1</a>
</li>
<li>
<a href="#tabs-2">Tab 2</a>
</li>
</ul>
<div id="tabs-1">
<button id="tabOneBtn">I'm in tab one</button>
<p id="tabOneCount"></p>
</div>
<div id="tabs-2">
<button id="tabTwoBtn">I'm in tab two</button>
<P id="tabTwoCount"></P>
</div>
</div>
这是我的单元测试的样子:
[TestMethod, TestCategory("SampleTest")]
public void SampleJQueryTabsTest()
{
driver.FindElement(By.XPath("//div[@id='tabs']/ul/li[1]")).Click();
driver.FindElement(By.Id("tabOneBtn")).Click();
// assert that count is now 1
Assert.AreEqual("1", driver.FindElement(By.Id("tabOneCount")).Text);
// Click the second tab
driver.FindElement(By.XPath("//div[@id='tabs']/ul/li[2]")).Click();
driver.FindElement(By.Id("tabTwoBtn")).Click();
// assert that count is now 1
Assert.AreEqual("1", driver.FindElement(By.Id("tabTwoCount")).Text);
}
使用ChromeDriver运行,一切都过去了。但是,当我使用PhantomJSDriver运行时,它在以下行中失败:
driver.FindElement(By.Id("tabTwoBtn")).Click();
结果讯息:
测试方法MyProject.WebDriverDemo.SampleJQueryTabsTest抛出异常: OpenQA.Selenium.ElementNotVisibleException:{“errorMessage”:“元素当前不可见,可能无法操作”,“请求”:{“headers”:{“Accept”:“application / json,image / png”,“Connection” “:” 关闭 “ ”内容长度“: ”0“, ”内容类型“: ”应用/ JSON;字符集= UTF-8“, ”主机“: ”本地主机:49593“}, ”httpVersion“:” 1.1" , “方法”: “POST”, “邮报”: “”, “URL”: “/点击”, “urlParsed”:{ “锚”: “”, “查询”: “”, “文件”: “点击”, “目录”: “/”, “路径”: “/点击”, “相对”: “/点击”, “口”: “”, “主人”: “”, “密码”: “” “用户”: “”, “用户信息”: “”, “权威”: “”, “协议”: “”, “源”: “/点击”, “queryKey”:{}, “块”:[ “点击”]} “urlOriginal”: “/会话/ e22c43f0-7c05-11e4-9c9e-6191347cc85b /元件/%3Awdc%3A1417732544176 /点击”}}
有问题的元素是标签2下的按钮,但是按钮不可见的唯一原因是标签2从未被点击过。这意味着以下行失败,但仅使用PhantomJSDriver:
driver.FindElement(By.XPath("//div[@id='tabs']/ul/li[2]")).Click();
为什么这只会为PhantomJSDriver而不是ChromeDriver失败?这是PhantomJS中可能存在的错误吗?
附加说明:
当我在VS2012中将以下行放入Quick Watch时:
driver.FindElement(By.XPath("//div[@id='tabs']/ul/li[2]"))
我看到了Selected属性的以下内容:
driver.FindElement(By.XPath(“// div [@ id ='tabs'] / ul / li [2]”))。Selected'抛出类型'OpenQA.Selenium.InvalidElementStateException'的异常'bool { OpenQA.Selenium.InvalidElementStateException}
但是,使用ChromeDriver运行时,Selected属性只显示false值而不是InvalidElementStateException。
答案 0 :(得分:0)
问题是您单击列表元素而不是附带的链接(a
)。 PhantomJS&#39; element.click
函数并不总是有用,这可能是ghostdriver无法点击不可点击元素的原因。但是a
元素是可点击的。
因此,您需要点击.../li[2]/a
而不是of .../li[2]
。