如何在前端测试时在下拉菜单中定位链接

时间:2014-02-20 11:16:40

标签: json selenium-webdriver

我正在冒险进行前端测试。为了让这个任务感觉更轻松,我使用的是selenium builder,但是我很难在下拉菜单和旋转横幅上定位链接。

为简单起见,我将坚持使用下拉菜单作为示例(我假设它们都将通过定位正确的路径来解决)

Selenium构建器生成JSON文件。我认为调整这个文件可能是我的问题的答案,但我正在努力找出我可以做出的调整来定位我追求的链接。

我定位的HTML

<div id="locale-switcher" style="display: none"> 
    <li class="language-switcher OneLinkNoTx"> 
         <a href="#language-options">Select language</a> 
         <ul id="language-options"> 
             <li><a class="modal-link" href="#currency-change" rel="/uk/store/" onclick="confirmStoreSwitch(this.rel);">English</a></li> 
             <li><a class="modal-link" href="#currency-change" rel="/other/store/" onclick="confirmStoreSwitch(this.rel);">Other</a></li> 
         </ul> 
    </li> 
</div>

生成的json文件

{
  "type": "script",
  "seleniumVersion": "2",
  "formatVersion": 2,
  "steps": [
    {
      "type": "get",
      "url": "http://www.mySite.co.uk/uk/store/"
    },
{
  "type": "clickElement",
  "locator": {
    "type": "link text",
    "value": "English"
  }
}
  ],
  "data": {
    "configs": {},
    "source": "none"
  },
  "inputs": []
}

该程序还建议替代目标所需的元素,在这种情况下:

“type”:“clickElement”建议alt1:

  "locator": {
    "type": "css selector",
    "value": "a.modal-link"
  }

“type”:“clickElement”建议使用alt2:

  "locator": {
    "type": "xpath",
    "value": "//ul[@id='language-options']//a[.='English']"
  }

“type”:“clickElement”建议使用alt3

 "locator": {
    "type": "xpath",
    "value": "//div[1]/header/nav/ul/li[1]/ul/li[1]/a"
 }

但是没有这些建议正在发挥作用。如何定位所需的元素?

1 个答案:

答案 0 :(得分:0)

我终于解决了它。答案是没有调整JSON文件,因为即使您传递了有效的JSON,它也可能不被selenium builder读取。

最终答案是获得正确的xpath,而不是尝试单击该元素,但要验证它,存储并检索它。

获取xpath(使用firebug) 导航到您定位的链接 右键单击并选择“使用firebug检查元素” 右键单击元素(或文本)本身,然后选择copy xpath

Selenium构建器也会通过单击链接为您提供xpath,但它会设置命令 clickElementAttribute ,您需要更改它。

下面列出了我在selenium构建器中定位下拉菜单项的顺序:

获取 [www.myHomePage.com]

verifyTextPresent [可见菜单链接]

storeElementAttribute locator [xpath to hidden item],属性名称 href,变量链接

verifyElementAttribute locator [xpath to hidden item],属性名称 href,变量 $ {link} < / p>

获取 $ {link}

waitForCurrentUrl [/ url / you / are / targeting]

请注意链接和$ {link}是变量,应按上面所述编写。您可以对旋转横幅使用相同的技术,也可以使用命令 waitForTextPresent clickElementAttribute