您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

量角器中的自定义浏览器操作

量角器中的自定义浏览器操作

但是,严格来说,得到的是:

browser.actions().mouseDown(element).sleep(5000).mouseUp(element).perform();

意味着弄乱硒的胆量。因此,YMMV。

请注意,量角器文档webdriver.WebDriver.prototype.actions在解释操作时引用的,我的意思是指它没有修改添加到Selenium提供的内容中。

传回的物件类别webdriver.WebDriver.prototype.actionswebdriver.ActionSequence。实际导致序列执行任何操作的方法webdriver.ActionSequence.prototype.perform。在认实现中,此函数采用调用.sendKeys()或时记录的命令,.mouseDown()并具有ActionSequence与之关联的驱动程序的顺序安排它们。因此,*

webdriver.ActionSequence.prototype.sleep = function (delay) {
    var driver = this.driver_;
    driver.sleep(delay);
    return this;
};

否则,睡眠会发生 。您要做的就是 记录 所需的效果,以便稍后执行

现在,要考虑的另一件事是,认值.perform()只希望执行webdriver.Command,这是要发送到浏览器的命令。睡眠不是这样的命令之一。因此.perform()必须进行修改以处理我们将要记录的内容.sleep()。在下面的代码中,除了之外,我还选择了.sleep()记录一个函数并进行修改.perform()以处理函数webdriver.Command

放在一起后,这就是整个外观。我先给出了一个使用库存硒的示例,然后添加了补丁和使用修改后的代码的示例。

var webdriver = require('selenium-webdriver');
var By = webdriver.By;
var until = webdriver.until;
var chrome = require('selenium-webdriver/chrome');

// Do it using what Selenium inherently provides.

var browser = new chrome.Driver();

browser.get("http://www.google.com");

browser.findElement(By.name("q")).click();
browser.actions().sendKeys("foo").perform();
browser.sleep(2000);
browser.actions().sendKeys("bar").perform();
browser.sleep(2000);

// Do it with an extended ActionSequence.

webdriver.ActionSequence.prototype.sleep = function (delay) {
    var driver = this.driver_;
    // This just records the action in an array. this.schedule_ is part of
    // the "stock" code.
    this.schedule_("sleep", function () { driver.sleep(delay); });
    return this;
};

webdriver.ActionSequence.prototype.perform = function () {
    var actions = this.actions_.slice();
    var driver = this.driver_;
    return driver.controlFlow().execute(function() {
        actions.forEach(function(action) {
            var command = action.command;
            // This is a new test to distinguish functions, which 
            // require handling one way and the usual commands which
            // require a different handling.
            if (typeof command === "function")
                // This puts the command in its proper place within
                // the control flow that was created above
                // (driver.controlFlow()).
                driver.flow_.execute(command);
            else
                driver.schedule(command, action.description);
        });
    }, 'ActionSequence.perform');
};

browser.get("http://www.google.com");

browser.findElement(By.name("q")).click();
browser.actions().sendKeys("foo")
    .sleep(2000)
    .sendKeys("bar")
    .sleep(2000)
    .perform();
browser.quit();

在我的实现中,.perform()我已经用普通的goog...JavaScript 替换了Selenium代码使用的功能

其他 2022/1/1 18:14:40 有596人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶