我正在尝试为下面的html代码找到正确的xpath,经过多次试验并在问题上花了3天后我放弃并需要帮助。在记录(执行代码)后从IDE检查它正确识别名为accountID的webeditbox但在运行测试脚本时它无法写入。请注意它在iframe中,并且在许多类和div框内。
IDE:Eclipse Juno 浏览器:FireFox Selenium 2 Webdriver
用于识别网络编辑框的HTML代码:
<input id="accountId" name="accountId" class="text" type="text" value="" maxlength="10">
使用的Selenium代码:
1)WebElement AccountID = driver.findElement(By.xpath("//[@id='accountId']"));
AccountID.sendKeys("1234");
2)同样//*[@id="customPMform"]/p/label
3)同样//*[@id="customPMform"]/p
我也试过by.id
但没有收获。有谁知道什么应该是正确的硒代码吗?
进一步的HTML代码:
<div class="portlet-borderless-container" style="">
<form id="customPMform" action="https://webcashier-stg1.egalacoral.com/web/galabingostg1-backup/prepaidcard?p_p_id=prePaidCardDeposit_WAR_prePaidCardbaseVersion60610_INSTANCE_Jl3g&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=2&_prePaidCardDeposit_WAR_prePaidCardbaseVersion60610_INSTANCE_Jl3g_action=submit" method="POST" onsubmit="return false;">
<input id="methodCode" name="methodCode" type="hidden" value="PrePaidCard">
<input id="depositSuccessUrl" name="depositSuccessUrl" type="hidden" value="/ppcdepositsuccess">
<input id="quickSuccessUrl" name="quickSuccessUrl" type="hidden" value="/ppcquickdepositsuccess">
<h2><span class="text-msg" name="prePaidCardDeposit.title">PrePaid Card</span></h2>
<p class="form">
<label for="accountId">
<span class="text-msg" name="prePaidCardDeposit.accountId">Account ID</span>
</label>
<input id="accountId" name="accountId" class="text" type="text" value="" maxlength="10">
</p>
</form>
</div>
答案 0 :(得分:1)
By.xpath("//input[@id='accountId']")
应该让您选择正确的元素
//[@id='accountId']
未指定标记,可以按上述方式进行更正
//*[@id="customPMform"]/p/label
选择标签,您无法将密钥发送到标签元素
//*[@id="customPMform"]/p
选择<p>
元素。与上述相同
答案 1 :(得分:0)
如果它位于 iframe ,您应该在访问其中的任何元素之前将控件切换为iframe。
driver.switchTo().frame("frameName/Id/index");
driver.findElement(By.id("accountId")).sendKeys("1234");
答案 2 :(得分:0)
在firebug中,如果右键单击该元素并选择“复制XPath”,则可能会为您提供所需内容。
答案 3 :(得分:0)
我在搜索name =“cardNumber”的字段时遇到了类似的问题。我想有一些字段名称掩码selenium可以防止被发现。
我的案例中的解决方法是使用绝对位置。您的问题可能如下:
//form[@id='customPMform']//input[4]
答案 4 :(得分:0)
框架应作为单独的页面处理,您应该在查找和使用框架的任何Web元素之前切换到该框架。
作为一种好的做法,开发人员应该提前告诉您页面上使用的帧数,flash元素和小程序。
答案 5 :(得分:0)
最好的方法是,使用selenium ide找到xpath并将其复制到您的代码中。因为有时候会有多个输入,如果你使用了firebug,它可能不会给你正确的xpath。 (例如:使用firebug生成的xpath可能是.// [@ id ='title']但是当使用selenium ide捕获它时可能是(.//[@id='title']) [2])。 你也可以选择生成绝对xpath并尝试。