我正在尝试废弃一个网站,所以我使用了selenium-webdriver。 我选择了javascript和nodejs作为自学语言。 以下是了解该工具行为的非常基本的代码。
我使用以下命令行启动它: node --debug-brk = 5858 src / app.js
var chromedriver = require('chromedriver');
var webdriver = require('selenium-webdriver'),
By = webdriver.By,
until = webdriver.until;
var driver = new webdriver.Builder()
.forBrowser('chrome')
.build();
driver.get('http://www.google.com/ncr');
debugger;
driver.findElement(By.name('q')).sendKeys('webdriver');
driver.findElement(By.name('btnG')).click();
driver.wait(until.titleIs('webdriver - Google Search'), 1000);
driver.quit();
我使用vscode作为IDE。 当我按下F5时,在代码中设置断点后,断点被击中但尚未打开浏览器。我点击resume(在VScode中),脚本完成,只有浏览器启动并执行相应的命令,我的断点现在被忽略,因为它已被命中。
这有以下结果:我不能一步一步地使用selenium webdriver,因此无法使用xpath命令评估find元素的内容。
我错过了什么,但没有看到什么。 我是否必须添加睡眠声明?
我见过大多数人使用java,但如果可能的话,我宁愿坚持使用javascript。
答案 0 :(得分:0)
我可以在您的计划中看到几个问题。
使用javascript编写webdriver时,一个重要的概念是所有函数调用都是异步的,并返回Thenable
或Promise
。所以你不能像顺序编程一样逐行编写。
你需要以这种方式工作:
driver.findElement(By.name('q')).sendKeys('webdriver')
.then( function(){
driver.findElement(By.name('btnG')).click();
...
});
请在此处查看WebDriver的JavaScript API文档: https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/index.html
在调试方面,如果您暂停浏览器的开发人员工具并在那里进行跟踪,那么您追踪的是您要搜索的网站程序,而不是您的webdriver程序。我使用WebStorm来跟踪我的webdriver程序。