我正在研究xpath
,我对此有一个疑问。以下是用于获取文本框输入的相关 html 代码:
<div id="formId:fld_SHIPPING_ADDRESS__PHONE_PRIMARY_id_wrapper"
class="fld_SHIPPING_ADDRESS__PHONE_PRIMARY_id ">
<label id="formId:lbl_SHIPPING_ADDRESS__PHONE_PRIMARY_id" style=""
for="formId:fld_SHIPPING_ADDRESS__PHONE_PRIMARY_id">
**<input id="formId:fld_SHIPPING_ADDRESS__PHONE_PRIMARY_id" type="text" maxlength="20"
value="" name="formId:fld_SHIPPING_ADDRESS__PHONE_PRIMARY_id"/>**
<span id="formId:fld_SHIPPING_ADDRESS__PHONE_PRIMARY_id_msg"/>
</div>
我把Xpath写成
driver.findElement(
By.xpath("//input[@id = 'formId:fld_SHIPPING_ADDRESS__PHONE_PRIMARY_id')]"))
.sendKeys("test");
这是html中唯一匹配的节点,当我运行它时,我收到以下错误
线程"main"中的异常 org.openqa.selenium.NoSuchElementException: 无法定位元素: {"方法":"xpath","selector":"//input[@id = 'formId:fld_SHIPPING_ADDRESS__PHONE_PRIMARY_id']"} 命令持续时间或超时:104.80 秒 有关此错误的文档,请访问:http://seleniumhq.org/exceptions/no_such_element.html
请帮忙!
我刚刚检查了您的源代码,发现您的输入框包含在一个框架中。
使用以下代码:-
//switch to the frame
driver.switchTo().frame("envoy");
//get the phone number field and enter data
driver.findElement(By.id("formId:fld_SHIPPING_ADDRESS__PHONE_PRIMARY_id")).sendKeys("");
在上面的代码中,我使用 id 作为定位器。我建议您使用 name 或 id 而不是 xpath。您正在测试的 Web 应用程序使用正确的 id 和名称标签进行了精美的编码!!
让我知道这是否对您有用。
可以从修复代码中的以下问题开始:
-
使用相应的
</label>
标记关闭<label>
标记。 -
删除
@id =
字符串中的两个空格。
如果上述方法解决了您获得的NoSuchElementException
,那么您可能还需要将.sendKeys("test")
扩展到 .sendKeys("test").submit()
,以完成此问题。