gpt4 book ai didi

javascript - 如何使用 capybara 从 ruby​​ 调用异步 javascript 函数?

转载 作者:行者123 更新时间:2023-11-30 20:19:17 26 4
gpt4 key购买 nike

我有一些针对跨平台 Ionic 应用程序的 E2E 测试。测试是用 Ruby 编写的,它们使用 appium_capybara , capybaraselenium-webdriver .

Ionic 应用程序有一个异步 javascript 函数,可以从开发者控制台使用它来登录应用程序。我想从测试中调用它,我设法通过一个名为 evaluate_async_script 的函数从 Ruby 中做到了这一点.

然而,虽然我已经证明异步函数确实被执行了,但我从 Ruby 得到了这个错误:

Timed out waiting for asyncrhonous script result after 10033 ms (Selenium::WebDriver::Error::ScriptTimeoutError)

为什么会这样?有关如何使其发挥作用的任何建议?

异步函数看起来像这样:

export async function signin(user: string, pass: string,
callback: (result: object) => object):
Promise<object> {
if (typeof(window.authService) === 'object') {
const credentials: ICredentials = {
email: user,
password: pass,
rememberMe: false
};

await window.authService.authenticate(credentials);

const result = { message: 'YES!!' };
callback(result);
return result;
}
return { message: 'EMPTY STRING!!' };
}

来自 Ruby 的调用如下所示:

result = Capybara.current_session
.evaluate_async_script("window.signin('#{user.email}',
'#{user.password}', (result) => { return result; })
.then(function(value) { alert(value.message); })")

弹出警报显示“是!!”消息,所以我知道该函数已执行。但出于某种原因,Ruby 从未注意到该函数已完成。

最佳答案

来自 Session#evaluate_async_script 的文档 - https://www.rubydoc.info/gems/capybara/Capybara/Session#evaluate_async_script-instance_method - 重要的部分是“来自将作为最后一个参数传递给脚本的回调函数”。您的脚本未调用可作为 arguments[0] 使用的回调函数,因此 Capybara 无法知道它已完成。

要使其正常工作,您需要类似于(未测试)

result = Capybara.current_session.evaluate_async_script("
var cb = arguments[0];
window.signin('#{user.email}','#{user.password}', cb);")

如果需要,您也可以将电子邮件和密码作为参数传递

result = Capybara.current_session.evaluate_async_script('
var cb = arguments[2];
window.signin(arguments[0], arguments[1], cb);', user.email, user.password)

请注意,这会将回调函数移动到 arguments[2],因为您首先传递了 2 个其他参数。

更大的问题是您是否甚至需要使用 evaluate_async_script。仅当您确实需要来自异步函数的响应时才需要它,如果不需要,您可以使用 execute_script 调用它并正常等待可见页面更改。

关于javascript - 如何使用 capybara 从 ruby​​ 调用异步 javascript 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51628163/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com