下面是基于我过去的Python项目(这里我使用JavaScript)尝试过的几个例子.
var eltext = driver.findElement(webdriver.By.className('el')).text;
console.log(elname);
var eltext = driver.findElement(webdriver.By.className('el')).innerText;
console.log(elname);
var eltext = driver.findElement(webdriver.By.className('el')).innerHTML;
console.log(elname);我还尝试了一些其他方法,使用String()、JSON.stringify()和各种for循环,在我的选项上旋转。我可以做一个.click(),并且这个对象是可点击的,所以我知道我的选择器是正确的,但是访问JavaScript中的内部文本是一个问题。
发布于 2014-11-05 02:00:59
以下是您可以这样做的方法:
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();您必须使用.then,因为这些方法不返回值本身,而是承诺获得值。
最后一个使用executeScript的方法同时获得这两个值。如果您想知道为什么要使用executeScript,原因是每次对getText和getInnerHtml的调用都意味着Selenium客户机(脚本)和Selenium服务器(浏览器)之间的往返。在大型测试套件中,这些往返积累起来,可以将 run 添加到套件的运行时。我还把它放在那里,以表明您可以使用此方法在浏览器上运行任何您想要的JavaScript。
发布于 2014-11-03 23:48:41
您正在处理的是Selenium中的WebElement,而不是DOM Element,所以不要尝试使用您从浏览器中知道的DOM。硒是一双不同的鞋子。
Selenium web驱动程序文档指向getText()或getInnerHtml()。
https://stackoverflow.com/questions/26725334
复制相似问题