Javascript 为什么可以';我不能在量角器中使用查询选择器吗?
我在用量角器。我知道量角器有类似Jquery的语法,但我需要一些可以 在我的一些测试中,基于DOM元素创建条件、变量和循环。我希望能够使用querySelector。仅仅使用承诺不会让我做我需要做的测试 当我运行它时,它会说:Javascript 为什么可以';我不能在量角器中使用查询选择器吗?,javascript,protractor,Javascript,Protractor,我在用量角器。我知道量角器有类似Jquery的语法,但我需要一些可以 在我的一些测试中,基于DOM元素创建条件、变量和循环。我希望能够使用querySelector。仅仅使用承诺不会让我做我需要做的测试 当我运行它时,它会说: Failed: Cannot read property 'querySelector' of undefined 或 或 我已经设置了一个测试来测试这个问题。它从我正在查看的一个随机网页上运行。它使用量角器选择页脚,然后使用querySelector进行尝试。如果我在
Failed: Cannot read property 'querySelector' of undefined
或
或
我已经设置了一个测试来测试这个问题。它从我正在查看的一个随机网页上运行。它使用量角器选择页脚,然后使用querySelector进行尝试。如果我在控制台中输入querySelector部分,它将正确运行代码。我还尝试了querySelector的变体,使用window.document;这也适用于浏览器,但不适用于量角器
describe("Test", function()
{
it('This is a test to test protractor' , function()
{
browser.waitForAngularEnabled(false);
browser.get("https://facebook.github.io/jest/");
$("#footer").getAttribute("innerHTML").then( function(value)
{
console.log("inside value then");
console.log(value);
});
var queryse = document.querySelector("#footer").innerHTML;
// var queryse = browser.document.querySelector("#footer").innerHTML;
// var queryse = window.document.querySelector("#footer").innerHTML;
console.log('query selector');
console.log(queryse);
});
});
您在量角器测试用例中运行的代码实际上并没有在浏览器中运行,事实上它是在
Node.js
中执行的。您应该将其视为一个API,之后将通过WebDriver
与浏览器进行通信。这意味着您不能在代码中使用特定于浏览器的JavaScript
API。$
帮助程序就是为了使语法简单易懂,而不需要了解任何关于Selenium的知识。这就是为什么您无法访问文档
和窗口
。如果您想了解更多这方面的信息:@Nhor的答案基本上是正确的,因为它涉及到环境以及您不能直接使用文档和窗口的原因。但是,无论如何,您可以通过找到DOM中的元素。唯一的问题是,你为什么要这么做
可以在DOM中使用的任何定位器都可以在量角器中使用(尽管语法可能不同)。下面是一个示例,我使用了innerHTML
,因为这正是您在案例中尝试的:
describe('Protractor Demo App', function() {
it('element test', function() {
browser.get('http://juliemr.github.io/protractor-demo/');
var el = browser.executeScript('return document.querySelector("h3").innerHTML');
el.then(function (text) {
console.log(text); // logs "Super Calculator"
});
});
});
最后,需要注意的是,此el
仅限于executeScript
调用中的javascript函数。它不是量角器的ElementFinder
版本,您不能对它执行getText()
之类的操作(尽管它仍然是一个承诺,所以您需要调用.then()
)。您可以在el
上进行控制台登录,查看该对象中的内容。如果我需要在没有承诺的情况下定位DOM元素,该怎么办?这是不可能的,这就是WebDriver
的工作方式,您对此无能为力,如果它仍然是承诺,与常规ElementFinder相比,这有什么好处?@munchscheal实际上没有好处,这就是为什么我在回答“为什么您需要这样做?”。使用querySelector
可以获取的任何定位器,都可以从它们的方法中获取量角器。只是想让您知道它可能有用,例如,在it()
字符串上写入名称、状态和ID。。。
describe("Test", function()
{
it('This is a test to test protractor' , function()
{
browser.waitForAngularEnabled(false);
browser.get("https://facebook.github.io/jest/");
$("#footer").getAttribute("innerHTML").then( function(value)
{
console.log("inside value then");
console.log(value);
});
var queryse = document.querySelector("#footer").innerHTML;
// var queryse = browser.document.querySelector("#footer").innerHTML;
// var queryse = window.document.querySelector("#footer").innerHTML;
console.log('query selector');
console.log(queryse);
});
});
describe('Protractor Demo App', function() {
it('element test', function() {
browser.get('http://juliemr.github.io/protractor-demo/');
var el = browser.executeScript('return document.querySelector("h3").innerHTML');
el.then(function (text) {
console.log(text); // logs "Super Calculator"
});
});
});