我正在为我的网站登录和注销功能编写一个简单的量角器测试。 登录测试运行正常,但我不知道如何编写注销测试,因为在将鼠标悬停在图标上后,下拉菜单中会显示注销链接
<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>
注销选项,因为它没有id
或class
,并且该元素也会被隐藏,因为它只出现在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();
这件事对我有用!
答案 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();
});