selenium web驱动程序如何在javascript中工作?

时间:2017-03-25 19:29:15

标签: javascript selenium

我正在尝试废弃一个网站,所以我使用了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。

1 个答案:

答案 0 :(得分:0)

我可以在您的计划中看到几个问题。

  1. 使用javascript编写webdriver时,一个重要的概念是所有函数调用都是异步的,并返回ThenablePromise。所以你不能像顺序编程一样逐行编写。

    你需要以这种方式工作:

    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

  2. 在调试方面,如果您暂停浏览器的开发人员工具并在那里进行跟踪,那么您追踪的是您要搜索的网站程序,而不是您的webdriver程序。我使用WebStorm来跟踪我的webdriver程序。