Tag: selenium webdriver

如何在另一个webdriver实例中重用现有的浏览器会话

正如问题所述 – 是否可以跨多个示例(即跨不同的浏览器会话)使用单个浏览器实例? 场景:在运行一堆seleniumtesting时,如果代码由于某种原因停止,则会重新启动代码,整个过程再次开始。 相反,如果会话可以被重用(甚至在初始化它的程序closures之后),那么我可以从停止的地方开始testing!

如何从meteorselenium错误恢复?

我的代码在Meteor服务器上调用(对于那些不知道meteor的人来说,它运行在Node.js之上): var webdriver = require('selenium-webdriver') function getPage(page) { driver = driver || new webdriver.Builder().forBrowser('chrome').build(); driver.get(page).catch(function(error){ throw new Meteor.Error("Can't get page " + page) }) } 熟悉meteor的人知道它通常应该把Meteor.Error传播给客户。 相反,Selenium捕获我的错误并退出代码1,导致服务器重新启动: W20160712-12:49:40.093(-7)? (STDERR) W20160712-12:49:40.104(-7)? (STDERR) /Users/irinaapex/irina/meteor/selenium/node_modules/selenium-webdriver/lib/promise.js:654 W20160712-12:49:40.104(-7)? (STDERR) throw error; W20160712-12:49:40.105(-7)? (STDERR) ^ W20160712-12:49:40.105(-7)? (STDERR) Error: [Can't get page i] W20160712-12:49:40.118(-7)? (STDERR) at imports/somethingSel.js:35:15 W20160712-12:49:40.120(-7)? (STDERR) at ManagedPromise.invokeCallback_ (/Users/irinaapex/irina/meteor/selenium/node_modules/selenium-webdriver/lib/promise.js:1379:14) […]

在使用CucumberJs进行场景失败后,截图并重新启动浏览器

我想用cucumberjs做一个相对简单的场景。 即在场景失败后,我想重新启动浏览器,以便它回到下一个场景的初始状态。 这是我的尝试 this.After({timeout: 30 * 1000}, function (scenario) { if(scenario.isFailed()) { return browser.takeScreenshot().then(function (buffer) { console.log("Restarting The Browser As We Got A Failure"); browser.restart(); console.log("Finished Restarting The Browser"); return scenario.attach(new Buffer(buffer, 'base64'), 'image/png'); }); } }); 它是在testing场景结束时运行的cucumberjs钩子中实现的。 但是,当框架在下一个testing场景中使用浏览器时,会引发如下exception [firefox #01] Step Definition: StepDefinitions\_Lpewf_Tc_04_steps.js:6 [firefox #01] Message: [firefox #01] UnsupportedOperationError: This driver instance does not […]

使用WebdriverJS禁用GhostDriver,PhantomJS的控制台日志

我一直在试图找出如何禁用令人讨厌的控制台日志,当我们用webdriverjs运行phantomjs(鬼驱动程序),但徒劳无功。 [INFO – 2016-10-09T14:57:15.039Z] GhostDriver – Main – running on port 62381 [INFO – 2016-10-09T14:57:15.084Z] Session [aa75cc80-8e30-11e6-8da5-a561819d4151] – page.settings – {"XSSAuditingEnabled":false,"javascriptCanCloseWindows":true,"javascriptCanOpenWindows":true,"javascriptEnabled":true,"loadImages":true,"localToRemoteUrlAccessEnabled":false,"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1","webSecurityEnabled":true} [INFO – 2016-10-09T14:57:15.084Z] Session [aa75cc80-8e30-11e6-8da5-a561819d4151] – page.customHeaders: – {} [INFO – 2016-10-09T14:57:15.084Z] Session [aa75cc80-8e30-11e6-8da5-a561819d4151] – Session.negotiatedCapabilities – {"browserName":"phantomjs","version":"2.1.1","driverName":"ghostdriver","driverVersion":"1.2.0","platform":"mac-10.10 (Yosemite)-64bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct"}} [INFO – 2016-10-09T14:57:15.084Z] SessionManagerReqHand […]

如何使用量angular器处理浏览器的本地authentication对话框

我需要使用量angular器(nodeJs)testing网页。 此网站受到保护,当您尝试input时,浏览器将显示其本地身份validation对话框。 我们曾经把用户名和密码添加到像这样的url https://username:password@example.com 但是这种方法在Chrome或Firefox中不起作用(我不记得是哪一个)。 如果填写对话框并提交,则浏览器再次发出相同的请求,添加以下标题 header: { Authorization: "Basic bF0A23Zwdfsf==" } 回到量angular器,脚本的第一件事是 browser.driver.get('https://example.com'); 所以我的第一个问题是:是否有可能以某种方式添加标题? 我也试着在onPrepare里调用fetch (这是在browser.driver.get之前) browser.driver.executeScript(function () { let headers = new Headers({"Authorization": "Basic " + new Buffer("username" + ":" + "password").toString("base64")}); let myInit = {method: "GET", headers: headers}; fetch("https://example.com", headers); }); 出于某种原因, fetch似乎忽略Authorization标头(它不存在于请求中)。 无论如何,这个问题变得越来越复杂,这就是我在这里发布的原因。 有谁知道解决scheme或有build议?

差异protractor.controlFlow().exec和browser.call()

我知道要将一个自定义函数插入到量angular器控制stream程中,您可以使用protractor.controlFlow()。execute,如下所示: protractor.promise.controlFlow().execute(function() { return getData().then(function(my_data) { return my_data.some_process(); }); }); 但是,似乎我可以使用browser.call()方法做同样的事情: browser.call(function() { return getData().then(function(my_data) { return my_data.some_process(); }); }); 据我所知,browser.call是webdriver控制stream的包装,protractor.controlFlow()与量angular器本身具有类似的function。 两者都回报“承诺”,所以他们似乎在做同样的事情。 两种方法是可以互换的吗? 如果不是的话,我什么时候该用这个或那个。

Selenium Webdriver Node.js:如何加载和执行jQuery代码

我使用Selenium webdriver&Node.JS进行functiontesting。 我试图使用jQuery代码做一些处理。 首先,我试图包括jquery并加载它: driver.executeScript(“var s = window.document.createElement('script'); \ s.src =' https: //cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js '; \ window.document.head.appendChild(s);“); – > 这个治疗似乎被执行(因为我没有捕捉到相关的错误) 但是,当试图使用jQuery的function,这里是一个例子: driver.executeScript( “$( '#编辑提交')上( '点击',函数(){警报( 'testing');})”); 我正在抓住这个: 我的error handling程序… WebDriverError:未知错误:$不是一个函数 似乎jquery要么没有成功加载,或者我没有正确使用它。 build议?

Selenium:服务器以状态127结束

我看了很多其他的post,似乎没有为我工作,即使它给出了同样的错误。 我通过Windows运行bash,所有我想要做的是从npm selenium-webdrivers获取给定的代码加载,甚至不工作。 这是app.js: require('chromedriver'); const 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'); driver.findElement(By.name('q')).sendKeys('webdriver'); driver.findElement(By.name('btnG')).click(); driver.wait(until.titleIs('webdriver – Google Search'), 1000); driver.quit(); 这里是我运行节点app.js 这里的Bash错误 任何帮助,将不胜感激

NightwatchJS“冻结”

当我们从Windows迁移到Linux时,我们的Nightwatchtesting不再运行。 它只是冻结。 Selenium服务器已经在监听, chrome_driver (linux 64位)设置正确。 但是,这是我们得到的: $ node nightwatch.js -t tests/mytest.js –verbose [ mytestmodule ] Running: MyTest INFO Request: POST /wd/hub/session – data: {"desiredCapabilities":{"browserName":"chrome","javascriptEnabled":true,"acceptSslCerts":true,"platform":"ANY"},"sessionId":null} – headers: {"Content-Type":"application/json","Content-Length":129} 任何build议非常感谢。

如何摆脱量angular器的循环?

这是我的代码 – formElements[0].findElements(by.repeater(repeater)).then(function(items){ console.log(i, '>>>>>>>>>.No of items in the list — '+items.length); (function(items){ for(var x1=0; x1<itemsToBeSelected.length; x1++){ console.log(i, '>>>>>>.Looking for item — '+itemsToBeSelected[x1]); skip = false; (function(items, x1){ for(var x2=0; x2<items.length; x2++){ (function(items, x2){ items[x2].getText().then(function(itemName){ console.log(i, '>>>>..Verifying '+itemsToBeSelected[x1]+' with '+itemName); if(itemName == itemsToBeSelected[x1]){ console.log(i, '>>>>>.Selecting the item — '+itemName); items[x2].findElement(by.css('.regular-checkbox')).click(); } }); }(items, x2)); } […]