Tag: selenium

从另一个Docker容器运行Zalenium的Selenium命令

由于我目前的项目情况,我需要一起使用2个docker图像进行seleniumtesting。 一个叫做Zalenium。 我已经通过docker-compose演示了。 它基本上像seleniumdocker回购,除了这可以loggingvideo,并显示你现场进展。 zalenium: image: "dosel/zalenium" container_name: zalenium hostname: zalenium tty: true volumes: – /Users/josephastrahan/seluser/videos:/home/seluser/videos – /var/run/docker.sock:/var/run/docker.sock – /usr/bin/docker:/usr/bin/docker ports: – 4444:4444 command: > start –chromeContainers 1 –firefoxContainers 1 –maxDockerSeleniumContainers 8 –screenWidth 800 –screenHeight 600 –timeZone "Europe/Berlin" –videoRecordingEnabled true –sauceLabsEnabled false –browserStackEnabled false –testingBotEnabled false –startTunnel false environment: – HOST_UID – HOST_GID – SAUCE_USERNAME […]

如何在独立模式下同步运行webdriverio?

http://webdriver.io/guide/getstarted/modes.html 我要绝对坚持使用Chromedriverdebuggingwebdriveriotesting。 由于webdriverio命令是asynchronous的,并且浏览器会话与testing不同步,因此您无法单步执行代码。 这是令人沮丧的,因为阅读文档,看起来你需要像Chai或wdio这样的testing框架来生成testing,但是这似乎有很多工作只是为了有程序上的同步命令。 我只需要使用webdriverio抓取一些网站,但这个asynchronous命令太难以使用Chrome开发工具进行debugging。 有没有办法强制webdriverio行为同步? EX) var loadedPage = webdriverio.remote(options).init().url('https://google.com'); 除了loadedPage没有准备好,并且在debugging移到下一行时未定义。

覆盖date构造函数执行脚本

我试图使用黄瓜js自动化一些testing,一个是依赖于一个函数调用新的date()。 我试着执行脚本并重写date这样的。 const driver = (this.driver as ThenableWebDriver); await driver.get(`http://localhost:5000/`); await driver.executeScript(` var d = new Date(2012,0,20); Date = function(){return d;} `); 如果我再次调用executeScript函数 await driver.executeScript(` alert(new Date()) // returns the date i set `); 新的date正确返回。 但是,当我模拟点击,并onClick做了一个新的date(),它获取本地date,而不是我设置的date。 任何小费? 提前致谢 [编辑]在这里看到这个: 如何覆盖量angular器testing新的date() var Date = (function() { var OldDate = Date; return function (){ return new OldDate(2012,0,20); […]

testing服务器上的seleniumtesting随机失败

我正在使用nodejs和nighwatch进行testing自动化的项目。 这里的问题是testing不可靠,并给出很多误报。 我尽一切努力使他们稳定,仍然得到了错误。 我经历了一些博客,如https://bocoup.com/blog/a-day-at-the-races ,并做了一些代码重构。 有没有人有一些build议来解决这个问题。 在这个时候,我有两个select,要么用Java重写代码(从解决scheme中删除nodejs和nightwatch,因为我更喜欢Java,然后是Javascript,大多数情况下,要与Javascript的非阻塞性质斗争)快照/审查应用程序日志/一次运行一个testing。 testing环境 :- 服务器-Linux 显示 – Framebuffer 总计虚拟机的-9与selenium节点并行运行testing。 浏览器 – Chrome 我得到的错误types是找不到元素。 大多数情况下,尽快加载页面,testing就会失败。 我已经设置了80秒的超时时间,所以不能发出。 testing是并行运行,但在单独的虚拟机,所以我不知道是否可以是问题。 编辑1: – 正在研究这个知道根本原因。 我做了下面的事情,以消除随机失败: – 一。 添加–suiteRetries重试失败的案例。 湾 通过错误的截图和DOM源。 一切似乎都很好。 C。 用明确的等待replace了browser.pause 同时在debugging时我观察到一个问题,也许这是导致随机故障的问题。 这是代码片段 for (var i = 0; i < apiResponse.data.length; i++) { var name = apiResponse.data[i]; browser.useXpath().waitForElementVisible(pageObject.getDynamicElement("@topicTextLabel", name.trim()), 5000, false); browser.useCss().assert.containsText( pageObject.getDynamicElement("@topicText", […]

什么是适合我的Firefox版本的geckodriver?

我正在尝试使用Firefox在Amazon Linux上运行nodeJs(节点v 8.8.1)自动化testing。 由于亚马逊Linux的一些限制,最新版本的firefox taht实际上运行的是41.下面是我的Firefox和亚马逊版本… [myuser@mymachine ~]$ firefox -v Mozilla Firefox 41.0 [myuser@mymachine ~]$ uname -a Linux ip-33-22-3-77 4.9.51-10.52.amzn1.x86_64 #1 SMP Fri Sep 29 01:16:19 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux 我的问题是,我使用什么版本的Geckodriver与此版本的Firefox兼容? 有了最新版本,我们得到错误,试图产生一个Firefox窗口,没有在我们的path壁虎驱动程序,我们得到了错误 /home/jboss/node_modules/selenium-webdriver/firefox/index.js:354 throw Error( ^ Error: The geckodriver executable could not be found on the current PATH. Please download the latest version from […]

以详细模式启动ChromeDriver – Node / JS

我正在尝试更新'node-huxley',以详细模式启动Chrome Web驱动程序,希望避免升级到OSX Mavericks造成的问题。 有关的代码如下: browser = webdriver.Capabilities.chrome(); driver = new webdriver.Builder() .usingServer(serverUrl) .withCapabilities(browser) .build(); https://github.com/chenglou/node-huxley/blob/master/source/browser.js 我努力寻找关于如何将命令参数('–verbose')添加到Chrome驱动程序的文档。

点击通过node.js和webdriver的随机链接

我有一些不同的产品页面,应该随机select其中之一。 我已经做了JavaScript的testing,但尝试使用node.js和selenium写它时有问题。 在我的testing页上,我得到了下一个结构 <div class="products"> <table width="600" cellspacing="6"> <tbody> <tr> <td> <a href="phones-59.php"></a> </td> <td>… </td> </tr> <tr>…</tr> … 所以下一个例子是在JavaScript上工作​​,我得到了我需要的所有链接 links = document.getElementById('products').getElementsByTagName('a'); 然后我使用随机select一些链接,像这样(例如在这里select一个链接随机 ) randomlink = Math.round(Math.random() * (links.length+1)); links[randomlink].click(); 没有什么特别的,但是当我在node.js中尝试过这样的技巧时,我无法访问链接。 尝试使用click()和其他函数时出现错误 driver.findElement(webdriver.By.id('products')).findElements(webdriver.By.tagName('a')); 那么如何在我的“产品”块中点击随机链接呢? 谢谢 PS我已经复制了“独特的select器”从Firefox开发者控制台,但不知道如何以正确的方式使用它(我已经尝试使用XPath没有成功) "products > table:nth-child(1) > tbody:nth-child(1)" 更新我也试过这样的build设,并得到正确的链接数量,但无法访问它们 ll = driver.findElement(webdriver.By.id('products')); lk = ll.findElements(webdriver.By.tagName('a')).then(function(txt) { logger.info("lk length: " + txt.length); […]

无法启动Selenium + PhantomJS / GhostDriver作为subprocess

我有一个Node脚本,我想使用child_process模块来获取运行PhantomJS的GhostDriver的Selenium服务器。 我需要模块: Child = require "child_process" 以下是我如何尝试启动服务器并将GD附加到它(在Coffeescript中): @Selenium = new Child.exec "java -jar selenium/selenium-server-standalone-2.44.0.jar -role hub -port 4444", (error, stdout, stderr) => console.log stdout console.log error if error @PhantomJS = new Child.exec "phantomjs –webdriver=8080 –webdriver-selenium-grid-hub=http://127.0.0.1:4444", (error, stdout, stderr) => console.log stdout console.log error if error @PhantomJS的stdout是这样的: PhantomJS is launching GhostDriver… [ERROR – 2014-12-10T18:51:27.587Z] GhostDriver – […]

从Node-webkit运行量angular器

除了使用CLI之外,是否可以以任何其他方式运行量angular器? 有一个API调用将模拟命令:“ protractor config file.js ”? 我想通过node-webkit应用程序开始testing,即使我可以通过directConnect参数直接连接到ChromeDriver,如果我无法在脚本中运行量angular器,这是没有用的。 当然,这是在Node和Protractor不能从CLI访问的环境中…模拟一个分布式环境,用户除了我的node-webkit之外不需要安装额外的应用程序(因此node-webkit用法) 。 提前感谢您的任何指针!

selenium – 点击一个button,直到出现一些元素

我正在尝试点击Yopmail网站上的“ Check for new emailsbutton,直到收到邮件(因为收件箱一开始是空的)。 我正在使用Selenium的NodeJS实现,使用Mocha运行我的testing。 下面是我正在尝试点击,直到元素出现: driver.get('http://yopmail.com'); driver.wait(until.elementLocated(By.css('#f .sbut'))); driver.findElement(By.name('login')).sendKeys(name); driver.findElement(By.css('#f .sbut')).sendKeys(Key.ENTER); driver.wait(until.elementLocated(By.id('ifinbox')));// Switching iframe driver.switchTo().frame("ifinbox"); bool = driver.isElementPresent("m1"); while (!bool) { driver.switchTo().defaultContent(); driver.findElement(By.id("lrefr")).click(); driver.sleep(500);// 500ms driver.switchTo().frame("ifinbox"); bool = driver.isElementPresent("m1"); } ligne bool = driver.isElementPresent("m1"); 失败,并显示以下错误消息: Error: the error {} was thrown, throw an Error 🙂 at Array.forEach (native) 我想我不能build立一个承诺的while循环…也许…但是,我真的不明白为什么它会失败,以及如何正确地写这个while循环。 任何build议是最受欢迎的!