什么是javascript只点击链接,如果它存在?

时间:2013-06-10 17:42:39

标签: javascript selenium conditional

我在SeleniumIDE,但是要求javascript。

对于其他人来说,这似乎是一种相当普遍的情况。

我有一个很好的测试套件,但它首先做的是登录。

我希望套件开始确保我已退出,如果没有,请将我退出。 我可以通过“退出”超链接

的存在来判断我是否已登录

但我只想点击注销如果我当前已登录,否则我想什么都不做,因为如果我还没有登录就试图点击不存在的元素会引发错误

逻辑上这是:

if ui element(logout link in my case) exists
  click on logout link
else
  do nothing
end

我正在使用Selenium IDE并调用javascript - 鉴于我在基本的seleniumIDE中无法做if then,我希望我能在javascript中做到这一点。

类似的东西:

store    javascript{if ([a with text 'Logout' exists]) then click on it end;}  id1

虽然不是click on it [this],但如果我刚刚访问了网址

,它也可以(虽然更脆弱)
http://my-apps-domain/users/sign_out

但我不确定确切的语法。

相关的HTML是:

<li><a href="/users/sign_out">Logout</a></li>

如果存在,我想点击a(或直接访问网址),否则没有。

如果可能,我想找到一个非jquery解决方案。

更新:我发现即使javascript{window.location.replace('http://google.com') }关闭了我的seleniumIDE窗口并将其替换为谷歌,但不影响测试本身运行的实际窗口。

2 个答案:

答案 0 :(得分:3)

在原始JavaScript中触发点击事件可能会非常棘手(请查看此答案:https://stackoverflow.com/a/10339248/2386700

但是,如果你也可以使用jQuery,那会简化一些事情。例如,如果注销按钮的ID为“logout”,那么您可以执行以下操作:

var logoutButton = $('#logout');

if (logoutButton != null) {
    logoutButton.click();
}

答案 1 :(得分:0)

由于您无法控制HTML,我建议您以其他方式引用该链接。为此目的,URL似乎非常可靠:

var logoutLink = document.querySelector('a[href="/users/sign_out"]');
if(logoutLink != null) {
    window.location.href = logoutLink.href;
}

您无需触发任何类型的点击事件,因为可以使用window.location轻松完成页面导航。

<强>更新

另一个想法是为您的按钮分配id,然后click it with selenium

var logoutLink = document.querySelector('a[href="/users/sign_out"]');
if(logoutLink != null) {
    logoutLink.setAttribute("id", "logoutLink");
}