gpt4 book ai didi

google-maps - 使用 Selenium IDE 单击 Google map

转载 作者:行者123 更新时间:2023-12-01 10:07:54 26 4
gpt4 key购买 nike

我无法创建 Selenium 测试用例来自动点击 Google map (特别是通过单击 map 创建标记)。

  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>

    执行命令时,这不仅将标记放置在可见 map View 之外,而且在页面刷新时也不可靠,因为 GMap 嵌套的 div 结构每次都在变化。

  2. 点击

    Here建议将 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 变体,但似乎没有任何效果。

我知道 Google 已经发布了他们的 Selenium test suites ,但我无法弄清楚如何利用它来发挥我的优势。任何帮助将不胜感激!

编辑:Google 的方法(以及我发现的所有其他方法)不起作用的原因似乎是因为我使用的是 Google map 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”的图片源,这是谷歌图片检索的特有功能。然后我会将它存储在一个 Selenium 变量中,并使用确切的 src 来点击。不幸的是,这是偶然发生的,因为同一张图片在三个不同的 div 中重复出现,并且不知道哪个真正在最上面。

然后 我找到了这个帖子:How to simulate a click by using x,y coordinates in JavaScript?

因为我可以使用 Selenium 函数计算出我的 map 的 X 和 Y 偏移量,所以我可以简单地运行 document.elementFromPoint() 来获取(我假设)如果您单击 x 和你的位置。我现在的步骤是:

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

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

<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,这对我来说已经足够好了。请注意,此解决方案取决于 availability document.elementFromPoint 函数。

关于google-maps - 使用 Selenium IDE 单击 Google map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8682845/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com