1

我在 SeleniumIDE 中,但调用了 javascript。

似乎这对其他人来说也是相当普遍的情况。

我有一个很好的测试套件,但它做的第一件事就是登录。

我希望套件开始时确保我已注销,如果没有,则将我注销。我可以通过“注销”超链接来判断我是否已登录

但是我只想在我当前已登录时单击注销,否则我什么也不想做,因为如果我尚未登录,尝试单击不存在的元素会引发错误)

所以逻辑上是这样的:

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

我正在使用 Selenium IDE 并调用 javascript - 鉴于我无法if then在基本的 seleniumIDE 中执行此操作,我希望我可以在 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(或直接访问url),否则什么都没有。

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

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

4

2 回答 2

3

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

但是,如果您也可以使用 jQuery,那将简化事情。例如,如果注销按钮的 id 类似于“logout”,那么您可以执行以下操作:

var logoutButton = $('#logout');

if (logoutButton != null) {
    logoutButton.click();
}
于 2013-06-11T15:50:16.390 回答
0

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

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

您不需要触发任何类型的点击事件,因为可以使用window.location.

更新:

另一个想法是给你的按钮分配一个id,然后用 selenium 点击它

var logoutLink = document.querySelector('a[href="/users/sign_out"]');
if(logoutLink != null) {
    logoutLink.setAttribute("id", "logoutLink");
}
于 2013-06-12T18:10:53.770 回答