使用 Selenium IDE 单击 Google 地图

2024-04-29

我无法创建 Selenium 测试用例来自动点击 Google 地图(具体来说,通过单击地图来创建标记)。

  1. IDE中的录制功能

    “记录”功能将我的鼠标点击记录为

    <tr>
        <td>click</td>
        <td>//div[@id='map_canvas']/div[3]/div/div/div[4]/div/div/div[5]</td>
        <td></td>
    </tr>
    

    执行该命令时,这不仅将标记方式放置在可见地图视图之外,而且在页面刷新时也不可靠,因为 GMap 嵌套 div 结构每次都会发生变化。

  2. clickAt

    Here https://stackoverflow.com/questions/2589039/placing-an-embedded-google-map-marker-with-selenium建议将 clickAt 与外部 div 的 div 一起使用,如下所示:

    <tr>
        <td>clickAt</td>
        <td>//div[@id='map_canvas']/div/div[1]</td>
        <td>(400,300)</td>
    </tr>
    

    这根本不起作用。我已经尝试了我能想到的所有 click、clickAt 和 mouseDown/mouseUp 变体,但似乎没有任何结果。

我确实知道谷歌已经发布了他们的硒测试套件 http://code.google.com/p/gmaps-api-issues/wiki/SeleniumTests,但我不知道如何利用它来发挥我的优势。任何帮助,将不胜感激!

编辑:谷歌的方法(以及我发现的所有其他方法)不起作用的原因似乎是因为我正在使用谷歌地图 API 的 v3。 Google 自己的 Selenium 测试似乎使用的是 v2。


经过一番折腾后,我想我找到了一个足够优雅和健壮的解决方案,至少可以处理页面刷新。

首先,我想既然我可以使用 storeEval 命令运行任意 JS,也许我可以利用 JS 的强大功能来查找需要单击的元素。我的第一个想法是搜索实际图像并单击它:

var imgs = window.document.getElementsByTagName("img");
str = "";
for (var i = 0; i<imgs.length; i++) {
    if (imgs[i].src.match("GetMapImage")) {
        str = imgs[i].src;
        break;
    }
}
str;

上面的代码在所有图像中搜索包含“GetMapImage”的图像源,这是Google图像检索所特有的。然后,我将其存储在 Selenium 变量中,并使用确切的 src 来 clickAt。不幸的是,这是偶然的,因为同一个图像在三个不同的 div 中重复,并且不知道哪一个实际上会在顶部。

Then我找到了这个帖子:如何在 JavaScript 中使用 x,y 坐标模拟点击? https://stackoverflow.com/questions/3277369/simulate-a-click-by-using-x-y-coordinates-javascript

由于我可以使用 Selenium 函数计算出地图的 X 和 Y 偏移量,因此我可以简单地运行 document.elementFromPoint() 来获取(我假设)如果您单击该 x 和 y 位置,您自然会单击的任何元素。我现在的步骤是:

  1. 获取我的地图 div 的左侧和顶部位置。
  2. 获取将在这些坐标处单击的元素。
  3. 将此元素的 id 设置为唯一的值。
  4. 使用带有此 id 的 clickAt 函数。

我成功的硒代码如下所示:

<tr>
    <td>storeElementPositionLeft</td>
    <td>id=map</td>
    <td>left</td>
</tr>
<tr>
    <td>storeElementPositionTop</td>
    <td>id=map</td>
    <td>top</td>
</tr>
<tr>
    <td>storeEval</td>
    <td>window.document.elementFromPoint(${left}, ${top}).id = &quot;selenium-gmap&quot;</td>
    <td>dummy</td>
</tr>
<tr>
    <td>clickAt</td>
    <td>id=selenium-gmap</td>
    <td>200,100</td>
</tr>

这至少可以在 Firefox 9.0.1 中运行,这对我来说已经足够好了。请注意,该解决方案取决于可用性 http://www.quirksmode.org/dom/w3c_cssom.html#documentviewdocument.elementFromPoint 函数的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Selenium IDE 单击 Google 地图 的相关文章

  • 导致链接平移并打开地图中的标记

    JSFiddle http jsfiddle net megatimes NVDLf 7 http jsfiddle net megatimes NVDLf 7 我有一张地图 它从数组创建多个标记 地图下方是一些链接 单击这些链接时 我想让
  • Android:随着设备移动在mapv2上绘制路径

    我正在制作一个应用程序 我必须在其中当我的设备移动时在地图上绘制路径 我搜索了我的教程但都显示在两点之间绘制路径但是我要当我的设备移动时绘制路径 任何有关此的帮助将不胜感激 当你的设备移动时 你的意思是什么 无论哪种方式 您都必须使用位置侦
  • 如何将自定义 POI 添加到谷歌地图导航

    我是 Android 系统的快乐用户 并且经常使用 Google 地图导航 betta 到目前为止 您可以在开车时在地图上添加具有不同 POI 商店 银行 加油站等 的图层 我的问题是是否有一个 API 可以添加您自己的图层 带有您自定义的
  • 在基于 AngularJS 的 Web 应用程序中使用 Selenium

    我逐渐知道 Selenium 是 UI 测试之父 现在我的问题是为什么 Angular 团队开发了 Protractor 对于基于 AngularJS 的 Web 应用程序 Selenium 不能完成同样的工作 Protractor 所做的
  • 通过 Selenium 捕获 JSON 响应

    我正在使用 Selenium IDE 或 webdriver 测试网页 该网页有一个 搜索 功能 基本上只是一个带参数的 GET 调用 javascript 还输出以控制台从搜索调用返回的 JSON 即类似console log data
  • SDK 管理器中缺少 Google Play 服务

    我想在我的应用程序中使用 Google 地图 我想在 SDK 管理器中安装 Google Play 服务 但是当我转到 SDK 管理器时 我没有看到 Google Play 服务 为什么 我该如何安装这个 我可以独立于 SDK Manage
  • 删除 Google Maps API Premier 使用条款/徽标/等。链接?

    删除我的集成谷歌地图 谷歌地图总理 上显示的徽标 使用条款链接是否合法 问题是 当我放大地图时 链接往往会变得更长并记录并覆盖整个网站 这非常难看 当然可以给div容器一个 overflow hidden 标志有一点帮助 但仍不令人满意 T
  • 从 Selenium Webdriver WebElement 字段检索值并将其传递给 java 变量

    首先 请原谅初学者的问题 我是 Java 和 Selenium Webdriver 的新手 我正在通过尝试测试 CMS 应用程序来学习 Webdriver CMS 的概念是创建文章并通过工作流程发送它们 因此 编辑可能会创建一篇文章并发送给
  • 如何在 NUnit 测试中使用 Selenium 获取 javascript 日志?

    我正在尝试使用 Selenium ChromeDriver 从 Visual Studio 上的 NUnit 测试中检索 Javascript 控制台日志 但我在日志上得到空值 我已经尝试了下面的代码 但它会在 driver Manage
  • 从鼠标位置获取地图纬度经度

    我正在尝试将鼠标在谷歌地图上的位置转换为 LatLng 对象 我看到很多关于通过谷歌地图 点击 事件等获取位置的帖子 如下所示 google maps event addListener map click function event m
  • 如何检查当前日期并移至下一个日期

    我遇到了一个我似乎无法理解的 python 问题 不确定是否需要使用 if 语句 但因为我是 python 新手 所以我实际上不确定如何编写这个小问题 事实上 这就是我遇到的问题 对于出发日历 我希望 python 能够执行以下操作 查看
  • 使用 python 和 selenium 自动化 Google 登录显示“此浏览器或应用程序可能不安全”

    我尝试使用 Gmail 或任何 Google 服务登录 但显示以下 此浏览器或应用程序可能不安全 消息 我还尝试执行诸如在我的 acc 中启用不太安全的应用程序之类的选项 但它不起作用 然后我创建了一个新的谷歌帐户 它对我有用 但我的旧配件
  • Firefox 中的文件下载对话框

    我正在使用firefox进行selenium python编程 自动开始下载并保存文件 我已经完成了所有操作 但无法下载csv文件 我的python版本是2 6 6 我的selenium版本是最新版本 我也尝试使用以下链接 即 fp web
  • java.net.SocketException:Selenium driver.close() 或 driver.quit() 语句上的连接重置

    我看到一个java net SocketException 连接重置几乎每次我使用 driver close 或 driver quit 语句时 浏览器确实关闭了 并且到目前为止 该异常并未影响我的任何测试 但我仍然想了解为什么会发生这种情
  • 在 Protractor / Webdriver 中等待页面重定向

    我有一个测试 单击按钮并重定向到用户仪表板 当发生这种情况时 Webdriver 返回 javascript error document unloaded while waiting for result 为了解决这个问题 我插入brow
  • Selenium Webdriver - Firefox 中元素不可点击错误

    通常在 Chrome 驱动程序中出现的元素不可点击错误也恰好在 Firefox 中出现 显示的错误消息 Exception in thread main org openqa selenium WebDriverException Elem
  • 从 JSON 数组创建标记 php mySQL Google Maps v2 android

    我正在尝试从 mySQL 数据库在 Google Maps v2 上创建标记 但它不起作用 地图确实出现了 但没有标记 谁能告诉我出了什么问题以及我需要改变什么 我也尝试过让 getDouble 为 getDouble 0 和 getDou
  • 45000 ms 内无法绑定锁定端口 70 54

    当我尝试使用 MVN 测试命令行运行我的 selenium 测试时 出现此错误 奇怪的是 我三天前尝试了一下 运行成功了 T E S T S Running GoogleNavigationTest Tests run 1 Failures
  • python + selenium webdriver:使用身份验证方法

    我正在使用 python selenium webdriver 来自动化检查 我被困在通过弹出窗口请求 http 身份验证的网站上 我试图通过以下代码使用 身份验证 方法 init driver webdriver Firefox driv
  • 在 selenium webdriver 中打开一个新窗口而不是新选项卡

    当在我的应用程序中手动单击链接时 它会在 Chrome 和 IE 中的新选项卡中打开 但是 当我的脚本运行时 该链接会在 IE 中的新窗口而不是新选项卡中打开 相同的脚本在 Chrome 中按预期运行 知道如何摆脱这个吗 更改 IE 的默认

随机推荐

  • 如何在控制器外部访问RequestContext?

    背景 我正在尝试将业务逻辑从控制器移至它们自己的服务中 控制器 public class AccountController Controller private readonly IAccountService accountServic
  • nUnit Assert.That(method,Throws.Exception) 不捕获异常

    有人可以告诉我为什么这个检查异常的单元测试失败了 显然我真正的测试是检查其他代码 但我使用 Int32 Parse 来显示问题 Test public void MyTest Assert That Int32 Parse abc Thro
  • 调试Windows服务

    Scenario 我有一个用 C 编写的 Windows 服务 我已经阅读了所有关于如何调试它的谷歌线程 但我仍然无法让它工作 我已经运行 PathTo NetFramework InstallUtil exe C MyService ex
  • 如何禁用Excel自动识别数字和文本

    我使用 Python 生成了 CSV 文件 但是当我在Excel中打开它时 如果可以转换 Excel会自动将字符串识别为数字 e g 33E105变成33 10 105 这实际上是一个ID 而不是一个数字 如何在打开 CSV 文件时在 Ex
  • 枚举列表中的列表

    我有一个约会 并记录了那天发生的事件 我想枚举显示日历的日期的事件列表 我还需要能够从列表中删除事件 def command add date event calendar if date not in calendar calendar
  • 当用户输入时将输入值转换为货币格式

    我无法将输入值转换为货币格式 我想在用户键入数字 5 000 00 125 000 00 时自动添加千位和小数分隔符 这是我的代码 input CurrencyInput on blur focus keyup function this
  • 检查仪器中的内存分配

    我已经使用泄漏工具清除了应用程序的泄漏 但我仍然注意到当我切换视图时 objectalloc 工具分配的对象数量和占用空间会增加 我特别看到大量 GeneralBlock 16 主要由基金会负责调用者 NSLogv and GeneralB
  • 为什么这个 require 从 rake 中失败但在显式运行时成功?

    帮助我理解为什么这个项目的测试在直接执行时运行 但在通过 rake 运行时不运行 通过 Rake TestTask 运行时出现错误 Execute test home myockey rvm rubies ruby 1 9 2 p136 b
  • PHPExcel 日期字段与源电子表格不匹配

    这是我的电子表格中的内容 12 04 2011 8 56 17 p m xls dateserial 40645 87242 这是我用来提取日期并转换为 PHP 中的日期字符串的代码 txn date xls sheet gt getCel
  • 服务中有很多依赖项

    我在服务层的应用程序中遇到依赖关系问题 我有以下课程
  • U-SQL 中的自动增量

    我正在尝试形成一个新表 其中包含现有表中唯一的 user id 是否可以添加自动递增U SQL 中的主键就像我们可以在 MySQL 中添加一样吗 详细说明 David 的答案 与 MySQL 不同 ADLA U SQL 是在横向扩展的无共享
  • MongoDB - WiredTiger 快照与锁定

    我不完全理解这两个功能在 WiredTiger MongoDB 程序中如何相互关联 1 WiredTiger 快照 2 数据锁定 如果使用WiredTiger引擎的每个读操作在读时都提供了数据库级别的 快照 以便创建一致性 ACID中的C
  • Swiftui Binding 操作尝试每帧更新多次

    我在调试文本字段输入的问题时遇到问题 信息 MacOs 蒙特利版本 12 0 Beta 21A5284e Xcode 13 0 beta 3 13A5192j 实体手机IOS 15 0 19A297e 问题说明 当我尝试输入绑定到视图模型的
  • 如何在类组件中使用 setState 以正确的方式更新数组内对象的属性?

    我有一个处于状态的对象数组 其结构如下 const arrayOfTests id 1 name test1 description test description id 2 name test2 description test des
  • 在没有 Webpack 的情况下从 NPM 模块解析 Sass @import

    有没有办法做到这一点 我讨厌那些巨大的道路 node modules etc 我的构建工具是 NPM 脚本 我的模块捆绑器是 Rollup 如果这有什么区别的话 对于node sass 您可以使用该选项 importer my import
  • 将 NA 替换为 NA 前后情况的平均值

    假设我有以下数据框 t lt c 1 1 2 4 5 4 u lt c 1 3 4 5 4 2 v lt c 2 3 4 5 NA 2 w lt c NA 3 4 5 2 3 x lt c 2 3 4 5 6 NA df lt data f
  • 将触摸转移到父视图而不禁用子视图的用户交互

    我在视图控制器的视图上有一个 UIView UIView 上添加了平移手势 现在我想将触摸转移到父视图 视图控制器的视图 以便父视图也调用触摸委托方法 并且 UIView 也被平移 取决于你想做什么 如果你想让视图控制器知道 UIView
  • jQuery Mobile 断开链接。正确的使用方法是什么?

    我将 jQuery Mobile 添加到我的项目中 因为我希望滑动事件触发 Bootstrap 轮播滚动 用它编码一天左右后 我注意到内部链接不再起作用 我可以使用以下两个页面 test1 html 可靠地重现这一点 a href test
  • 一种在没有 form_for 或 form_tag 的情况下使用 Rails 表单助手的方法

    我正在尝试迭代我的 Rails 模型FlsCenter并在选择特定 ActiveRecord 时执行一些简单的 JavaScript 我怎样才能使用类似的东西f select并实现这一目标
  • 使用 Selenium IDE 单击 Google 地图

    我无法创建 Selenium 测试用例来自动点击 Google 地图 具体来说 通过单击地图来创建标记 IDE中的录制功能 记录 功能将我的鼠标点击记录为 tr td click td td div id map canvas div 3