如何从li中提取带有属性'title'的所有'a'标签

时间:2017-08-18 20:38:55

标签: selenium selenium-webdriver automation protractor

如何提取所有标签标题值。以下是xml结构。 ulTopMenu是悬停下拉列表。我正在使用量角器。

<ul id="ulTopMenu">
<li>
<li>
<li>
    <ul class="submenu">
        <li>
            <a href="" title = "test2"></a></li>
        <li>
            <a href ="" title = "test1" ></a></li>
    </ul>
 </li>
</ul>

以下是我试过的

var menus = element.all(by.css('#ulTopMenu > li'));
    var submenu = element.all(by.css('#ulTopMenu > li .submenu li')).all(by.tagName('a'));
    browser.actions().mouseMove(menus.get(3)).perform().then(function () {
        submenu.filter(function (elem, index) {
            return elem.getAttribute('title').then(function (val) {
                return val === 'test1'
            })
        }).first().click();

总是给我一个错误,说元素不可见

2 个答案:

答案 0 :(得分:0)

如果没有实际执行代码并查看正在发生的事情,很难调试,但这是一个有根据的猜测 - 你不应该首先打开下拉列表本身:

var dropdown = element(by.id("ulTopMenu"));
var submenu = dropdown.$("ul.submenu");
var desiredMenuItem = submenu.$('li > a[title=test1]');

browser.actions()
    .mouseMove(dropdown)
    .mouseMove(submenu)
    .click(desiredMenuItem)
    .perform()

请注意我是如何使用CSS选择器通过标题找到链接的。

并且,请注意我在应用操作时所做的假设 - 看看您是否需要通过鼠标移动或点击来更改下拉菜单的打开方式。

您可能还需要在操作之间添加延迟 - 我们在类似情况下一直使用custom sleep() browser action

如果您只需要提取属性为title的链接文本:

$$("#ulTopMenu ul.subMenu li > a[title]").getText().then(console.log);

答案 1 :(得分:0)

错误绝对正确。如果它是一个下拉菜单,那么子菜单通常如何显示?是的,你应该先点击它(下拉列表)。只有在子菜单可见后,您才能点击子菜单项。