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

时间:2016-11-08 01:15:26

标签: jquery html protractor e2e-testing

我正在为我的网站登录和注销功能编写一个简单的量角器测试。 登录测试运行正常,但我不知道如何编写注销测试,因为在将鼠标悬停在图标上后,下拉菜单中会显示注销链接

<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,没有类的隐藏元素。我已搜索但到目前为止找不到任何解决方案。请帮忙!

更新: 我已经尝试过这次注销,但它发出了这个错误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();

这件事对我有用!

2 个答案:

答案 0 :(得分:5)

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

代码段

 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();
 });

仅供参考:如果上述定位器无法找到元素,则更新下拉列表和注销链接定位器

答案 1 :(得分:2)

这可能有所帮助:

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();
});