0

我看到一个奇怪的失败,无法选择一对 jQuery ui 选项卡的第二个选项卡。这对 ChromeDriver 非常有效,但对 PhantomJSDriver 失败。

我的 PhantomJS 版本:1.9.8

jQuery 版本:1.10.2

jQuery 用户界面版本:1.10.3

开发环境: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":"元素当前不可见,可能无法操作","re​​quest":{"headers":{"Accept":"application /json, image/png","Connection":"关闭","Content-Length":"0","Content-Type":"application/json;charset=utf-8","Host":"localhost :49593"},"httpVersion":"1.1","method":"POST","post":"","url":"/click","urlParsed":{"anchor":"","查询“:”“文件”:“点击”,“目录”:“/”,“路径”:“/点击”,relative":"/click","port":"","host":"","password":"","user":"","userInfo":"","authority":"", "protocol":"","source":"/click","queryKey":{},"chunks":["click"]},"urlOriginal":"/session/e22c43f0-7c05-11e4-9c9e- 6191347cc85b/element/%3Awdc%3A1417732544176/点击"}}urlOriginal":"/session/e22c43f0-7c05-11e4-9c9e-6191347cc85b/element/%3Awdc%3A1417732544176/click"}}urlOriginal":"/session/e22c43f0-7c05-11e4-9c9e-6191347cc85b/element/%3Awdc%3A1417732544176/click"}}

不可见的元素是选项卡 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。

4

1 回答 1

0

问题是您单击列表元素而不是随附的链接 ( a)。PhantomJS 的element.click功能并不总是有效,这可能是 ghostdriver 无法点击不可点击元素的原因。但是一个a元素是可点击的。

所以你需要点击.../li[2]/a代替of .../li[2]

于 2014-12-05T15:52:31.503 回答