使用selenium webdriver识别ExtJS元素

时间:2017-06-08 20:37:24

标签: selenium xpath extjs webdriver

我正在处理EXTJS应用程序中的下拉按钮,我正在尝试使用selenium web驱动程序进行自动化。

点击图片,我将获得<DIV>&#39; s形式的元素列表 单击

中的选择

请帮助我如何设置xpath点击此图片,我不应该使用&#34; id&#34; (因为它的extjs可能会不时变化)。 如果有任何选择器我可以用于extjs请建议。谢谢你的帮助。

<DIV id=ext-gen2337 class=x-form-field-wrap style="WIDTH: 0px">
    <INPUT id=ext-gen2023 class=" x-form-text x-form-field" style="WIDTH: 297px" readOnly size=24 value="Clients with pending exceptions" name=ext-gen2023 autocomplete="off">
    <IMG id=ext-gen2338 class="x-form-trigger x-form-arrow-trigger" src="https://cloud-ua1.statestr.com/epwais/html/com.ssc.epw.gui.EPWHome/clear.cache.gif">
</DIV>

3 个答案:

答案 0 :(得分:1)

请尝试以下XPath以匹配所需的img元素:

//input[@value="Clients with pending exceptions"]/following-sibling::img

答案 1 :(得分:0)

因此,如果您想开始测试ExtJS应用程序,并且您不想使用最佳解决方案,例如Sencha Test或Bryntum Siesta。

解决这个问题的最佳方法是在ExtJS组件和网站的html dom之间编写自己的图层。

您可以在我的答案https://stackoverflow.com/a/41718879/1768843

中查看更多信息

但你需要做的是使用Ext.Component.Query,使用Selenium你可以在网站上执行javascript代码。所以你执行ext查询并在那里传递Ext选择器 - 例如button[text=something]panel[name=mainPanel]只是任何ExtJS组件选择器。这将返回ExtJS对象,您只需调用.getDom().getId(),它将返回HTML中使用的实际dom或id。接下来,您只需使用webdriver函数单击(或某些)站点中的HTML元素。

^^你需要这样做,因为ExtJS框架可以每次都以不同的方式生成HTML。例如,您添加新容器或升级ExtJS版本并更改HTML,您的测试可能会停止工作。但是如果你将Ext组件称为日志,因为Ext源代码仍然相同,那么你的测试将始终有效。

但这样做是一件非常麻烦的工作。使用Sencha Test等准备好的解决方案会更好,因为一切都准备好测试ExtJS应用程序。

答案 2 :(得分:0)

我会做这样的事情:

driver.findElement(By.xpath("//div[contains(@class, 'x-form-field-wrap')]//img"));

driver.findElement(By.xpath("//img[contains(@src, 'https://cloud-ua1.statestr.com/epwais/html/com.ssc.epw.gui.EPWHome/clear.cache.gif')]"));