Selenium webdriver - 找不到正确的Xpath / ID输入字段

时间:2013-02-19 16:19:25

标签: selenium xpath

我正在尝试为下面的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&amp;p_p_lifecycle=1&amp;p_p_state=normal&amp;p_p_mode=view&amp;p_p_col_id=column-1&amp;p_p_col_count=2&amp;_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>

6 个答案:

答案 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并尝试。