如何编写用量角器单击下拉菜单中的选项的测试?

How to write a test for clicking an option in the drop down menu with protractor?

我正在为我的网站登录和注销功能编写一个简单的量角器测试。 登录测试 运行 很好,但我不知道如何编写注销测试,因为将鼠标悬停在图标

上后,下拉菜单中会出现注销 link
<div class="dropdownx">
  <a href="#link" class="my-account"><i class="fa fa-user"></i></a>
  <div class="dropdownx-content" style="text-align:center; margin-left:-60px; ">
    <p><a href="#account">My Account</a></p>
    <p><a href="#order_history">Order History</a></p>
    <p><a href="#downloads">Downloads</a></p>
    <p><a href="#transactions">Transactions</a></p>
    <p><a href="#wishlist" id="wishlist-total">Wish List (0)</a></p>
    <p><a href="#logout">Logout</a></p>
  </div>
</div>

我如何访问最后一个 <a> 用于注销选项,因为它没有 idclass,而且该元素将被隐藏,因为它只出现在 hover. 我写了这个登录测试。

describe('To test mdpocket login window', function(){
it('should be able to login', function() {
    browser.driver
    browser.driver.get('login_page_link');
    browser.driver.findElement(by.css('#input-email')).sendKeys("email@gmail.com");
    browser.driver.findElement(by.css('#input-password')).sendKeys("some_password_here");
    var login = browser.driver.findElement(by.css('#button-login'))
    login.click();
})
});

所以基本上我的问题是如何获得没有 id 的隐藏元素,没有 class。我已经搜索但到目前为止找不到任何解决方案。请帮忙!

更新: 我试过这个注销但是它给出了这个错误 Process exited with error code 1

var dropDown = browser.driver.findElement(by.css('.dropdownx'));
browser.actions().mouseMove(dropDown).perform();
browser.driver.findElement(By.xpath("//a[text() = 'Logout']")).click();

我的解决方案:

var dropDown = browser.driver.findElement(by.css('.my-account'))
browser.actions().mouseMove(dropDown).perform();
browser.driver.findElement(By.xpath("//a[text() = 'Logout']")).click();

这东西对我有用!

首先,您需要移动鼠标光标并保持下拉元素。因此所有下拉菜单选项都可见。现在将光标移动到注销 link 并单击。您可以按照以下代码:

代码段

 var EC=protractor.ExpectedConditions;
 var dropDown=element(by.css(".dropdownx"));
 var logoutLink=element(by.css('a[href="#logout"]'));

 browser.actions().mouseMove(dropDown).perform().then(function(){
   browser.wait(EC.visibilityOf(dropDown),8000,'Logout Link is not visible');
   browser.actions().mouseMove(logoutLink).click().perform();
 });

仅供参考:更新下拉列表并注销 link 定位器,以防上述定位器无法找到元素

这可能有帮助:

var dropDown = element(by.css(".dropdownx"));

browser.actions().mouseMove(dropDown).perform().then(function () {
    element(by.className('dropdownx-content')).all(by.tagName('a')).filter(function (elem, index) {
        return elem.getText().then(function (val) {
            return val === 'Logout'
        })
    }).first().click();
});