【问题标题】:The click action in mailinator page does not work with protractormailinator 页面中的点击操作不适用于量角器
【发布时间】:2020-11-01 13:03:32
【问题描述】:

我正在尝试自动将验证码发送到 mailinator 中的电子邮件,当我运行测试时错误是:“TimeoutError: Wait timed out after 35001ms”,我认为这是异步函数有问题,但我对此并不安全。

const emailRow = element(by.className("tr.even.pointer.ng-scope"));
this.setCode = async function() {
    let windows =  await browser.getAllWindowHandles();
    await browser.switchTo().window(windows[1]);
    await browser.wait(ExpectedConditions.visibilityOf(emailRow), 50000);
    browser.actions().mouseMove(emailRow).click().perform();
    await browser.wait(ExpectedConditions.visibilityOf(emailCode), 35000);
}

我也试过了

this.setCode = async function() {
    let windows =  await browser.getAllWindowHandles();
    await browser.switchTo().window(windows[1]);
    await browser.wait(ExpectedConditions.elementToBeClickable(emailRow), 50000);
    emailRow.click();
    await browser.wait(ExpectedConditions.visibilityOf(emailCode), 35000);
}

但是我有同样的问题,在屏幕上我看不到测试执行点击,我在 emailRow 中点击后进入睡眠但不起作用,在图像中有我的页面想要执行点击。

【问题讨论】:

    标签: javascript selenium protractor automated-tests


    【解决方案1】:

    我认为你最好的选择是使用他们的 api,而不是去他们的网站并在那里阅读电子邮件。在量角器中,这很容易。根据您是否拥有高级帐户,您可以使用公共或私人团队收件箱。对于公共收件箱,执行类似于以下的操作:

    const checkMailinatorPublicEmail = async () => {
    
        process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
    
        let requestUrl = 'https://mailinator.com/api/v2/domains/public/inboxes/your_inbox_name_here';
        let responseBody = await fetch(requestUrl);
        let responseJson = await responseBody.json();
        return responseJson;
    }
    

    现在,您的响应正文中收件箱中的所有电子邮件都是一个 json 对象。为了简单起见,不要使用静态的公共团队收件箱,而是使用随机收件箱名称,这样每次收件箱中只有一封电子邮件,您可以根据需要解析该电子邮件。

    【讨论】:

    • 当然,您可以对这种方法进行改进,使其更具动态性。我只是想给你一个大致的想法。
    【解决方案2】:

    我认为您应该尝试第二种方法。在第一种方法中,您正在等待一个元素可见,但不能保证元素是可点击的。 通过查看第二种方法,代码看起来不错。我的建议是尝试改变如下点击方法

     browser.executeScript('arguments[0].click()', emailRow.getWebElement());
    

    希望这会有所帮助

    编码愉快!

    【讨论】:

    • 您好,感谢您的帮助,您想用“arguments[0]”做什么?我不明白那部分代码
    • 函数executeScript()的第二个参数是可变参数。在这种情况下,我们将 WebElement 作为参数传递,并且我们只想选择或者我们可以说我们作为参数传递的第一个 WebElement,这就是 argument[0]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 2020-12-15
    • 2015-11-13
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    相关资源
    最近更新 更多