首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium Server的行为与WebDriver不同

Selenium Server的行为与WebDriver不同
EN

Stack Overflow用户
提问于 2013-03-14 15:33:04
回答 2查看 1.4K关注 0票数 0

我有硒问题。我会尽我最大的努力来解释我的设置和我想做什么。

简短的版本:

使用在本地运行我的自动化测试很好。通过selenium服务器独立jar运行完全相同的脚本(不管是远程的还是本地的)在代码不发生奇怪更改的情况下无法工作。

  • 是否有一种方法可以获得与webdriver库行为相同的selenium服务器独立jar版本?
  • 或者,是否有一些远程的ruby版本的selenium服务器,这样,硒组件的宝石版本就可以远程工作了?

最基本的总结:“我觉得自己就像在帽衫上,要求吃饭,我在这里错过了一些非常基本的东西。”

我想做的是:

我试图自动测试一个web应用程序。其想法是能够加载公司的网站,然后像实际用户那样与页面元素交互(单击链接,将文本放入文本框,选择单选按钮和复选框等)。我使用ruby 1.9.3和mac (10.8.2)上用于ruby的selenium-webdriver开发了这些测试。我自己创建了一个ruby包装器库,我称之为"WebAutomation.rb“,在这个库中,我创建了自己的方法,以便单击元素。我制作的包装器方法之一的示例如下:

代码语言:javascript
复制
def WebAutomation.click_element_by_attribute(attribute_name, attribute_value, tag, contains=true)
  element = WebAutomation.find_element_by_attribute(attribute_name, attribute_value, tag, contains)
  @log.debug("Element returned: #{element}")
  raise "Could not click element with #{attribute_name} attribute of #{attribute_value}" unless element.click
end

WebAutomation.find_element_by_attribute调用另一个方法来查看我给它的所有元素。作为另一层抽象,我不是直接运行ruby代码,而是通过黄瓜脚本运行它,这不是我的问题。这段代码都在本地工作--我的意思是,当被自动驱动的浏览器是本地运行的代码时。

然而,我希望一切都是花哨的,而不必在本地运行代码,因为我在mac上,假设我想做跨浏览器测试,就像在IE上运行它一样。所以我有一台远程mac和一台远程windows膝上型电脑,目的是通过像Jenkins这样的系统来运行它,Jenkins盒可以告诉这些远程机器运行浏览器测试。我还没到我担心詹金斯的地步。我只是想让远程版本的测试通过。

我的烦恼:

运行我的黄瓜/红宝石脚本本地工作很好。他们太棒了,我以为我才是真正的男人。然后,我使用相同的浏览器(chrome)将它运行到远程mac上,所有的事情都变坏了。

我正在做的事情是:

在远程mac笔记本上,我下载了selenium服务器独立jar,并按如下方式启动:

代码语言:javascript
复制
java -jar selenium-server-standalone-2.31.0.jar

我觉得很高兴:

代码语言:javascript
复制
Mar 14, 2013 8:00:06 AM org.openqa.grid.selenium.GridLauncher main
INFO: Launching a standalone server
08:00:11.606 INFO - Java: Oracle Corporation 23.6-b04
08:00:11.608 INFO - OS: Mac OS X 10.8.2 x86_64
08:00:11.616 INFO - v2.31.0, with Core v2.31.0. Built from revision 1bd294d
08:00:11.728 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
08:00:11.729 INFO - Version Jetty/5.1.x
08:00:11.730 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
08:00:11.730 INFO - Started HttpContext[/selenium-server,/selenium-server]
08:00:11.731 INFO - Started HttpContext[/,/]
08:00:11.744 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@4f8429d6
08:00:11.744 INFO - Started HttpContext[/wd,/wd]
08:00:11.747 INFO - Started SocketListener on 0.0.0.0:4444
08:00:11.747 INFO - Started org.openqa.jetty.jetty.Server@4dfbca86

然后我运行我的黄瓜脚本,传递给它一些命令行参数,这些参数告诉它到远程mac膝上型计算机的IP上,运行什么浏览器,以及我想让浏览器为我们的应用程序运行什么环境(这并不重要)。

看起来是这样的:

代码语言:javascript
复制
 cucumber REMOTE_URL=http://10.110.10.233:4444/wd/hub BROWSER=chrome JJ_ENV=staging features/jabberjaw/contact_us.feature:3

我有代码,当传递REMOTE_URL参数时,远程浏览器将被调用,而不是本地浏览器。执行的代码如下:

代码语言:javascript
复制
#This is the code that runs for a local browser
def WebAutomation.set_browser(browser)
  @log.debug("Starting browser: #{browser}")
  @driver = Selenium::WebDriver.for(browser)
end

#If the remote url is passed in, then I make a remote browser
def WebAutomation.set_remote_browser(url, browser)
  @log.debug("Starting remote browser: #{browser} at #{url}")
  @driver = Selenium::WebDriver.for(:remote, :url => url, :desired_capabilities => browser)
end

浏览器窗口弹出在远程计算机上,它将转到正确的url并登录。但是,在远程运行时,selenium服务器在单击屏幕上不明显的元素时似乎会出现问题。我用一个

代码语言:javascript
复制
@driver.action.move_to(element, 100, 100).perform

我不得不添加100,100偏移,因为即使移动似乎只到左上角,元素仍然没有在屏幕上。另一件事是,除非element.click (上面的代码),否则您知道我提出的异常吗?是的,不管单击是否真的发生,这都会触发,因为出于某种原因,远程版本(selenium-server)在element.click上返回零,不管它成功与否。当我在本地运行相同的代码(其中它使用webdriver )时,它给我一个{},当它成功的时候,给我一个{},当它不是的时候,它给我一个{}。因此,要让这段代码在chrome上远程工作,我必须执行以下操作:

代码语言:javascript
复制
def WebAutomation.click_element_by_attribute(attribute_name, attribute_value, tag, contains=true)
  element = WebAutomation.find_element_by_attribute(attribute_name, attribute_value, tag, contains)
  @driver.action.move_to(element, 100, 100).perform
  @log.debug("Element returned: #{element}")
  element.click
end

本质上,显式地移动到找到的元素,并且只信任click工作。是的,对于黄瓜,我确实有一层薄薄的保护层,脚本中的下一步应该是一个检查单击应该做的任何操作是否成功的步骤,但我觉得错误的是,我必须去掉这个例外,并可能对错误的结果敞开心扉。

而且,即使修改后的代码在firefox的远程版本上也完全失败(我不得不移到firefox 18上,因为任何高于18的代码似乎都不能使用selenium -即使是本地的)--它只是打开浏览器窗口而不执行其他操作)。在firefox上,浏览器窗口出现,导航到url,登录(直到现在,它就像铬一样),但是它只是给了我一个手指,说"MoveElementTargetOutOfBoundsException“。

我还尝试去掉“偏远”,尝试在本地运行selenium-server jar,并在本地浏览器上运行测试,但通过selenium服务器jar运行。就像这样!

代码语言:javascript
复制
cucumber REMOTE_URL=http://localhost:4444/wd/hub BROWSER=chrome JJ_ENV=staging features/jabberjaw/contact_us.feature:3

我得到了同样的结果,所以我非常确信我的问题是selenium服务器jar对我的脚本的解释与我的完全不同。我不可能是第一个遇到这种情况的人,但我一直在谷歌上搜索,直到我的眼睛流血,无法找到解决办法。

在本地运行的客户端代码必须有某种方式远程解释,是吗?这不可能是一个新的问题,因为如果我必须创建奇怪的自定义代码,无论我是在本地运行,还是在远程运行,它是否是chrome,或者是firefox,那么整个“自动化是强大的和令人敬畏的,因为您可以进行跨浏览器的测试和跨环境的扩展”是一些蛋黄酱包装的芝士蛋糕。那个奶油馅?不想要。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-18 17:06:04

我也在windows远程测试中打开了自己的大门。显然,我需要获得chromedriver.exe和ieserverdriver.exe,并将它们放到服务器系统中。在windows上,仍然需要启动集线器,但是在启动节点时,需要添加以下参数:

代码语言:javascript
复制
-Dwebdriver.chrome.driver=<path_to_chromedriver.exe> -Dwebdriver.ie.driver=<path_to_ieserverdriver.exe>

然后在我的客户端机器上,我不得不使用端口5555而不是4444。

票数 0
EN

Stack Overflow用户

发布于 2013-03-15 20:18:41

看来我终于找到了一个局部的解决方案。

显然,仅仅启动selenium服务器独立jar是不够的。接下来的事让我走得更远了。

在服务器系统(将打开并与实际浏览器交互的远程系统)上:

代码语言:javascript
复制
java -jar selenium-server-standalone-2.31.0.jar -role hub

然后在一个新的终端窗口(静态服务器系统)中:

代码语言:javascript
复制
java -jar selenium-server-standalone-2.31.0.jar -role node http://localhost:4444/grid/register

然后在客户端系统(带有实际黄瓜和webdriver脚本的客户端系统)

代码语言:javascript
复制
cucumber REMOTE_URL=http://10.110.10.233:4444/wd/hub BROWSER=firefox JJ_ENV=staging

**注意,如果您在家里遵循,这个命令将是不同的,因为我编写了我的脚本,以接受REMOTE_URL和浏览器变量,以映射到远程webdriver调用。

在任何情况下,这都允许没有显式迁移方法的原始代码工作。我仍然必须消除我的提高条件,因为点击仍然给我的零,无论是否成功时,远距离。火狐也不再抛出MoveElementTargetOutOfBoundsException。

这些测试看起来仍然比在本地运行时脆弱得多,但至少有一些进展。如果有人知道为什么我的点击总是给我“零”在远程运行时,无论成功与否,我会很感激。如果有人还知道为什么添加这些角色参数(或者注册)的其他信息,与我阅读的几乎所有教程都告诉我要做的常规java -jar seleneium-server-standalone-2.31.0.jar命令相比,似乎是稳定的,我会感兴趣的。

然而,就像一大碗纤维一样,这些命令至少让我解除了障碍。没什么比大堵塞更糟糕的了。我希望如果其他人有类似的麻烦,这也对你有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15413548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档