有没有办法慢慢使用量角器编写Angular E2E测试,以便我可以观察正在发生的事情?
答案 0 :(得分:75)
以下是我的解决方案。所以基本上我为当前控制流execute
函数创建了一个装饰器,现在它在每个排队操作之前排队延迟100ms。
这需要在调用任何测试之前运行(在describe
块之外)
var origFn = browser.driver.controlFlow().execute;
browser.driver.controlFlow().execute = function() {
var args = arguments;
// queue 100ms wait
origFn.call(browser.driver.controlFlow(), function() {
return protractor.promise.delayed(100);
});
return origFn.apply(browser.driver.controlFlow(), args);
};
答案 1 :(得分:13)
就像乔治·斯托克在评论中所说的那样,我不知道你为什么要这样做......但你可以随时在测试中的任何地方添加一个睡眠。
browser.sleep(6000);
答案 2 :(得分:11)
您可以在代码中输入以下命令进入'调试模式':
browser.pause();
在调试模式下,您将在终端中看到以下输出:
------- WebDriver Debugger -------
ready
press c to continue to the next webdriver command
press d to continue to the next debugger statement
type "repl" to enter interactive mode
type "exit" to break out of interactive mode
press ^C to exit
然后你可以:
c
browser.pause()
d
)
repl
答案 3 :(得分:4)
先前的答案更像是解决方法。另一种方法是将参数添加到量角器配置中:
highlightDelay: 1000
并更改为:
directConnect: false
这将使量角器的动作(例如单击或键入)延迟1秒钟,并以浅蓝色突出显示。
答案 4 :(得分:1)
您可以突出显示您正在与之交互的元素!
highlightElement: async ($elementObject, time = 1000) => {
async function setStyle(element, style) {
const previous = await element.getAttribute('style');
await element.setAttribute('style', style);
await setTimeout(() => {
element.setAttribute('style', previous);
}, time);
}
await browser.sleep(time)
return await browser.executeScript(await setStyle, $elementObject.getWebElement(), 'color: red; background-color: yellow; z-index: 9999;');
},
这将突出显示元素一秒钟
然后使用这个元素包装你的动作
let click = async function ($elem) {
await highlightElement($elem);
await $elem.click();
}
let sendKeys = async function ($elem, text) {
await highlightElement($elem);
await $elem.sendKeys(text);
}
然后用它来尝试一些脚本
await sendKeys($login, username);
await sendKeys($password, password);
await click($submit);
这真的不应该用在真正的脚本中,只有在你玩它的时候才能使用
vs code https://medium.com/@ganeshsirsi/how-to-debug-protractor-tests-in-visual-studio-code-e945fc971a74 的例子,但同样的事情在 webstorm 中也可以实现
这将允许您逐行执行代码并实时与变量交互。每个使用量角器的人都必须拥有。我是认真的