JavaScript-使用SeleniumWebDriver什么将内部html返回给变量?

JavaScript-使用SeleniumWebDriver什么将内部html返回给变量?,javascript,selenium,selenium-webdriver,Javascript,Selenium,Selenium Webdriver,以下是我在过去的Python项目中尝试过的几个例子(这里我使用的是JavaScript) 我还尝试了使用String(),JSON.stringify(),以及各种for循环的其他一些方法,并根据我的选项进行旋转。我可以做一个.click(),这个对象是可点击的,所以我知道我的选择器是正确的,但是访问JavaScript中的内部文本是一个问题。您处理的是来自Selenium的,而不是DOM,所以不要尝试使用您从浏览器中知道的DOM API。硒是一种不同的鞋 指向getText()或getInne

以下是我在过去的Python项目中尝试过的几个例子(这里我使用的是JavaScript)

我还尝试了使用
String()
JSON.stringify()
,以及各种for循环的其他一些方法,并根据我的选项进行旋转。我可以做一个
.click()
,这个对象是可点击的,所以我知道我的选择器是正确的,但是访问JavaScript中的内部文本是一个问题。

您处理的是来自Selenium的,而不是DOM,所以不要尝试使用您从浏览器中知道的DOM API。硒是一种不同的鞋


指向
getText()
getInnerHtml()

以下是您的操作方法:

var webdriver = require('selenium-webdriver');

var driver = new webdriver.Builder().
   withCapabilities(webdriver.Capabilities.chrome()).
   build();

driver.get('http://www.example.com');

var el = driver.findElement(webdriver.By.tagName('div'));

// Get the text of the element using getText...
el.getText().then(function (text) {
    console.log(text);
});

// The code above could be shortened to this:
// el.getText().then(console.log);

// Get the inner HTML of the element using getInnerHtml...
el.getInnerHtml().then(function (html) {
    console.log(html);
});

// The code above could be shortened to this:
// el.getInnerHtml().then(console.log);

// Get the text browser side plus the innerHTML at the same time.
driver.executeScript('\
var el = arguments[0];\
return {text: el.innerText, html: el.innerHTML};\
', el).then(function (val) {
    console.log(val.text);
    console.log(val.html);
});

driver.quit();
您必须使用
。然后
,因为方法本身不返回值,而是承诺获取值


带有
executeScript
的最后一个方法同时获取两个值。如果您想知道为什么人们会为
executeScript
而烦恼,原因是每次调用
getText
getInnerHtml
都意味着Selenium客户端(您的脚本)和Selenium服务器(浏览器)之间的往返。在大型测试套件上,这些往返会累积,并会在套件的运行时间上增加分钟。我把它放在那里是为了表明你可以使用这个方法在浏览器上运行任何你想要的JavaScript。

它给了我findElement对象
{then:[Function:then],cancel:[Function:cancel],isPending:[Function:isPending]}
没错,你得到了一个。承诺现在已经成为Javasript的标准,因此您可以很容易地找到一些关于如何与他们合作的文档。我对这个信息丰富的答案投了赞成票,并将在早上与我的项目确认。如果是真的,这看起来只是分享了一些魔术,我的许多问题与承诺。
var webdriver = require('selenium-webdriver');

var driver = new webdriver.Builder().
   withCapabilities(webdriver.Capabilities.chrome()).
   build();

driver.get('http://www.example.com');

var el = driver.findElement(webdriver.By.tagName('div'));

// Get the text of the element using getText...
el.getText().then(function (text) {
    console.log(text);
});

// The code above could be shortened to this:
// el.getText().then(console.log);

// Get the inner HTML of the element using getInnerHtml...
el.getInnerHtml().then(function (html) {
    console.log(html);
});

// The code above could be shortened to this:
// el.getInnerHtml().then(console.log);

// Get the text browser side plus the innerHTML at the same time.
driver.executeScript('\
var el = arguments[0];\
return {text: el.innerText, html: el.innerHTML};\
', el).then(function (val) {
    console.log(val.text);
    console.log(val.html);
});

driver.quit();