使用Selenium Web驱动程序识别ExtJS元素

shyt4zoc  于 2022-11-05  发布在  其他
关注(0)|答案(3)|浏览(236)

我正在处理一个下拉按钮,在EXTJS应用程序,我试图与 selenium 网络驱动程序自动化。
点击图片,我将得到一个元素列表,以's的形式点击选择
请帮助我如何设置一个xpath来点击这张图片,我不应该使用“id”(因为它的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:REDACTED/com.ssc.epw.gui.EPWHome/clear.cache.gif">
xtupzzrd

xtupzzrd1#

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

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

yquaqz182#

因此,如果你想开始测试ExtJS应用程序,你不想使用最好的解决方案,如 Sencha 测试或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应用程序。

zaqlnxep

zaqlnxep3#

我会这样做:

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

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

相关问题