使用 Selenium Webdriver 测试 ZK 应用程序

Testing ZK applications with Selenium Webdriver

我最近开始研究 Java 语言的 Selenium Webdriver (Chrome)。我的应用程序是使用 zk 框架开发的,因此它的 ID 是随机生成的。例如:

/div[@id='z_j0_7!cave']/form[@id='loginForm']/table[@id='z_j0_9']/tbody/tr[@id='z_j0_a!chdextr']/td/table[@id='z_j0_a']/tbody/tr[@id='z_j0_a!cave']/td[@id='z_j0_c!chdextr']/input[@id='z_j0_c']

如何找到此类元素的 xpath?

zul文件是这样的:

<h:form id="loginForm" action="j_spring_security_check" method="POST">
  <vbox sclass="login_grid z-grid" spacing="2px">
    <hbox widths="7em, 8em">
      <label value="${c:l('login')}:"/>
      <textbox  id="login"  name="j_username" value="${LoginForm.login}"       use="de.hybris.platform.cscockpit.components.login.LoginTextBox"/>
    </hbox>
    <hbox widths="7em, 8em">
      <label value="${c:l('password')}:"/> 
      <textbox  type="password" id="pw" name="j_password"  value="${LoginForm.password}"  use="de.hybris.platform.cscockpit.components.login.PasswordTextBox"/>
    </hbox>
  </vbox>       
</h:form>

在开发者模式下查看:(对于标签用户 ID 及其输入字段)

<table id="z_38_a" z.type="zul.box.Box" class="z-hbox" z.zcls="z-hbox" cellpadding="0" cellspacing="0">
    <tbody>
        <tr id="z_38_a!cave" valign="top">
        <td id="z_38_b!chdextr" z.coexist="true" align="left" style="width:7em">        <span id="z_38_b" class="z-label" z.zcls="z-label">ユーザー ID:</span>
        </td>
        <td id="z_38_b!chdextr2" class="z-hbox-sep">
        </td>
        <td id="z_38_c!chdextr" z.coexist="true" align="left" style="width:8em"> <input id="z_38_c" z.type="zul.vd.Txbox" class="z-textbox" z.zcls="z-textbox" type="text" name="j_username" value="admin">
        </td>
        </tr>
    </tbody>
</table>

I'm looking for the xpath of login and password input fields. Programming language is java and I using Chromedriver.

不需要做额外的事情并使用 xpath 来定位 desire 元素,您可以使用 By.name() 定位器轻松定位 desire 元素以及以下 :-

WebElement user = driver.findElement(By.name("j_username"));

WebElement password = driver.findElement(By.name("j_password"));

我发现在使用 ZK 框架时,查找路径的最佳来源是使用 Katalon 记录器。这为每个元素提供了多个选项。示例:

for login
name=j_username
xpath=(.//*[normalize-space(text())and normalize-space(.)='User ID;'])[1]/following::input[1]
xpath=//input