【问题标题】:Webdriverjs - By is not definedWebdriverjs - 未定义
【发布时间】:2015-06-01 07:52:18
【问题描述】:

我正在使用 webdriverjs 打开一个网站并通过其 id 选择一个元素。代码是,

var webdriverjs = require('webdriverjs'),
    client      = webdriverjs.remote({desiredCapabilities:{browserName:'phantomjs'}}).init();

client.url('www.google.com', function(err){
  client.findElement(webdriverjs.By.id('lst-ib')).sendKeys('duck duck go\n')
})

它会抛出错误,

webdriverjs.By is undefined

webdriverjs中的By函数如何使用?

【问题讨论】:

标签: javascript phantomjs webdriver-io


【解决方案1】:

我认为你仍然可以使用 webdriverjs,但是他们的示例代码有错误

https://code.google.com/p/selenium/wiki/WebDriverJs

他们示例中的代码

driver.findElement(By.name("q")).sendKeys("webdriver");

driver.findElement(By.name("btnG")).click();

应该是

driver.findElement(webdriver.By.name("q")).sendKeys("webdriver");

driver.findElement(webdriver.By.name("btnG")).click();

我不知道为什么它在网站上不正确。

【讨论】:

    【解决方案2】:

    以上所有内容都是旧的,您现在可以改用selenium-webdriver。就我而言,我只是忘记包含 By 并且我的 IDE 没有帮助。

    ReferenceError: By is not defined

    我只需要:

    const {By} = require('selenium-webdriver');

    截至02022020的完整示例,包括使用chromedriver设置路径!

    const webdriver = require('selenium-webdriver');
    const chrome = require('selenium-webdriver/chrome');
    const chromedriver = require('chromedriver');
    const { By, Key } = webdriver; // Using object destructuring for convenience - or webdriver.By
    
    chrome.setDefaultService(new chrome.ServiceBuilder(chromedriver.path).build());
    
    const driver = new webdriver.Builder()
        .withCapabilities(webdriver.Capabilities.chrome())
        .build();
    
    driver.get('https://www.google.com');
    
    driver.findElements(By.xpath('//input[@type="text"]'))
        // ES6 desturcturing usage. Could be: (inputs), and then inputs[0].sendKeys...
        .then(([searchInput]) => {
            // inputs[0].sendKeys(...words);
            searchInput.sendKeys('stack overflow bumper stickers')
                .then(() => {
                    searchInput.sendKeys(Key.ENTER);
                });
        });
    

    【讨论】:

      【解决方案3】:

      来自 webdriverjs npm 页面...

      已弃用
      项目现在称为 WebdriverIO,并已移至 GitHub 上的 webdriverio/webdriverio。请使用 $ npm install webdriverio 因为这个 NPM 项目不再维护了!

      所以require('webdriverio'); 可能是您最好的选择。代替 client.findElement(webdriverjs.By.id('lst-ib')).sendKeys('duck duck go\n')
      简单
      client.setValue('#lst-ib','duck duck go', function(err, res){ //some callback here });

      【讨论】:

      • Saravana 你能用 webdriver.io 实现这个吗?
      【解决方案4】:
      
          var webdriver = require('selenium-webdriver'),
              By = webdriver.By,
              until = webdriver.until;
      
      

      请试试这个?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-27
        • 1970-01-01
        • 2013-11-04
        • 1970-01-01
        • 1970-01-01
        • 2017-10-14
        • 2016-08-20
        相关资源
        最近更新 更多