然后不执行浏览器



我正在尝试将量角器用于我们的应用程序。不幸的是,初始登录页面是非角的,因此我必须处理所有隐式等待,并带有预期条件。在下面的代码段中,从未执行click()。相反,测试时间等待下一页显示。在控制台输出(也粘贴下面)中,我看到了链接,但我看不到随后的点击操作。

var signUpLink = element(by.id('sign-up-link'));
var isLinkClickable = EC.elementToBeClickable(signUpLink);
browser.wait(isLinkClickable, 5000).then(function() {
    signUpLink.click();
});
var isWidgetVisible = EC.visibilityOf(element(by.id('email')));
browser.wait(isWidgetVisible, 5000, 'Sign Up Page is too slow');

这是控制台输出的片段:

12:54:17.404 INFO - Executing: [find elements: By.id: sign-up-link])
12:54:18.002 INFO - Done: [find elements: By.id: sign-up-link]
12:54:18.006 INFO - Executing: [is enabled: 0 [[ChromeDriver: chrome on MAC      ()] -> id: sign-up-link]])
12:54:18.141 INFO - Done: [is enabled: 0 [[ChromeDriver: chrome on MAC ()] -> id: sign-up-link]]
12:54:18.147 INFO - Executing: [find elements: By.id: sign-up-link])
12:54:18.755 INFO - Done: [find elements: By.id: sign-up-link]
12:54:18.760 INFO - Executing: [is displayed: 0 [[ChromeDriver: chrome on MAC ()] -> id: sign-up-link]])
12:54:18.770 INFO - Done: [is displayed: 0 [[ChromeDriver: chrome on MAC ()] -> id: sign-up-link]]
12:54:18.774 INFO - Executing: [find elements: By.id: sign-up-link])
12:54:18.780 INFO - Done: [find elements: By.id: sign-up-link]
12:54:18.787 INFO - Executing: [is enabled: 0 [[ChromeDriver: chrome on MAC ()] -> id: sign-up-link]])
12:54:18.791 INFO - Done: [is enabled: 0 [[ChromeDriver: chrome on MAC ()] -> id: sign-up-link]]
12:54:18.805 INFO - Executing: [find elements: By.id: email])
12:54:18.815 INFO - Done: [find elements: By.id: email]

编辑-5/10我通过添加明确的等待(gasp!)来使它起作用。我不知道为什么有效。为什么要单击链接需要这么长时间?

var signUpLink = element(by.id('sign-up-link'));
var isLinkClickable = EC.elementToBeClickable(signUpLink);
browser.wait(isLinkClickable, 5000);
browser.driver.sleep(3000);  // I give up
signUpLink.click();

我的最佳猜测是您共享的最佳猜测是,链接变得可单击,而DOM上方的元素仍在渲染中。最终结果是满足等待条件,安排了点击事件,但是在点击发生之前,将启用新元素将链接移动到其他地方,以使点击实际上不会点击链接。我知道这听起来很牵强,但是我在一个正在从事的项目上看到WebDriver-JVM发生了类似的事情。在我的项目上,我很幸运地在页面中加载了jQuery,因此我在尝试单击按钮之前使用Javascriptexecutor执行$(window).load();来解决我的问题,这确保了页面在WebDriver继续执行之前完全加载该页面。如果您碰巧加载了jQuery,则可以尝试做类似的事情:

browser.driver.executeScript('$(window).load();').then(function() {
    var signUpLink = element(by.id('sign-up-link'));
    var isLinkClickable = EC.elementToBeClickable(signUpLink);
    browser.wait(isLinkClickable, 5000).then(function() {
        signUpLink.click();
    });
    var isWidgetVisible = EC.visibilityOf(element(by.id('email')));
    browser.wait(isWidgetVisible, 5000, 'Sign Up Page is too slow');
});

最新更新