PhantomJSDriver无法选择jQuery ui选项卡

时间:2014-12-04 23:00:30

标签: .net selenium-webdriver phantomjs jquery-ui-tabs ghostdriver

我看到一个奇怪的失败,因为无法选择一对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。

1 个答案:

答案 0 :(得分:0)

问题是您单击列表元素而不是附带的链接(a)。 PhantomJS&#39; element.click函数并不总是有用,这可能是ghostdriver无法点击不可点击元素的原因。但是a元素是可点击的。

因此,您需要点击.../li[2]/a而不是of .../li[2]