使用Selenium更改eBay页面内容/ DOM的最简单方法

Selenium显然不是为了允许你修改浏览器页面的DOM而设计的,但我偶尔需要动态插入HTML元素。

在这个例子中:我使用Firefox和Selenium IDE来记录eBay上的拍卖列表,但我注意到它无法应对大量的JScripted拍卖内容控件并且没有为这些元素记录任何内容。

如果我为ebay网站关闭JavaScript,第一个拍卖条目页面的更简单版本就会被破坏(它缺少确认PayPal作为付款选项所需的隐藏输入元素)。

所以,我目前的选择是…… a)弄清楚如何与Selenium的花哨的JScript HTML编辑器控件进行交互,或者b)将新元素插入到DOM中。

有没有人有任何建议,最好是在C#,因为我在Windows控制台应用程序下自动执行此操作? 如果有人拥有代码,也可以接受Selenium User-Extensions。

到目前为止我找到了一个解决方案,所以我认为最好分享它以供审查/改进。

Selenium允许您使用user-extensions.js文件扩展其行为 。

例如,这会在Selenium中创建一个新的insertHtml命令:

Selenium.prototype.doInsertHtml = function(locator, text){ var element = this.page().findElement(locator); var innerHTML = text + element.innerHTML; element.innerHTML = innerHTML; } 

对于Selenium IDE使用,您只需通过IDE本身的选项菜单包含扩展文件。 下次启动IDE时,它会自动提供任何新命令(来自用户扩展文件)。

随着文档页面地址的更改,我可能会再次复制以下相关部分:

扩展selenium

扩展Selenium,添加自己的动作,断言和定位策略可以非常简单。 这是通过向Selenium对象原型和PageBot对象原型添加方法使用javascript完成的。 在启动时,Selenium会自动查看这些原型上的方法,使用名称模式来识别哪些是动作,断言和定位器。

以下示例尝试说明如何使用javascript扩展Selenium。

操作

Selenium原型上的所有doFoo方法都被添加为动作。 对于每个动作foo,还有一个动作fooAndWait已注册。 动作方法最多可以使用2个参数,这些参数将在测试中传递第二和第三列值。

示例:向Selenium添加“typeRepeated”操作,该操作将文本两次键入文本框。

 Selenium.prototype.doTypeRepeated = function(locator, text) { // All locator-strategies are automatically handled by "findElement" var element = this.page().findElement(locator); // Create the text to type var valueToType = text + text; // Replace the element text with the new text this.page().replaceText(element, valueToType); };