我正在处理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>
答案 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')]"));