0

我试图为下面的 html 代码找到正确的 xpath,经过多次试验并在我放弃并需要帮助的问题上花费了 3 天。记录后从 IDE 检查(执行代码),它正确识别了名为 accountID 的 webeditbox,但在运行测试脚本时它无法写入。请注意它在 iframe 中,并且在许多类和 div 框中。

IDE:Eclipse Juno 浏览器:FireFox Selenium 2 Webdriver

用于识别 Web 编辑框的 HTML 代码: <input id="accountId" name="accountId" class="text" type="text" value="" maxlength="10">

使用的硒代码:

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>
4

6 回答 6

1

By.xpath("//input[@id='accountId']")应该让你选择正确的元素

//[@id='accountId']没有指定标签,可以如上更正

//*[@id="customPMform"]/p/label选择标签,并且您不能将键发送到标签元素

//*[@id="customPMform"]/p选择<p>元素。和上面一样

于 2013-02-19T16:27:14.063 回答
0

In firebug, if you right click the element and choose Copy XPath, that may give you what you are looking for.

于 2013-02-19T20:17:22.003 回答
0

框架应作为单独的页面处理,您应该在查找和使用框架的任何 Web 元素之前切换到该框架。

作为一个好的做法,开发人员应该提前告诉您页面上使用的帧数、flash 元素、小程序。

于 2013-03-16T14:56:27.817 回答
0

如果它在iframe中,您应该在访问其中的任何元素之前将控件切换到 iframe。

driver.switchTo().frame("frameName/Id/index");
driver.findElement(By.id("accountId")).sendKeys("1234");
于 2013-02-19T16:53:50.927 回答
0

我在搜索 name="cardNumber" 的字段时遇到了类似的问题。我想有一些字段名称掩码 selenium 防止被发现。

在我的情况下,解决方法是使用绝对位置。您的问题可能如下:

//form[@id='customPMform']//input[4]
于 2013-02-28T12:03:38.843 回答
0

最好的方法是,使用 selenium ide 找到 xpath 并将其复制到您的代码中。因为有时会有多个输入,如果你使用 firebug,它可能不会给你正确的 xpath。(例如:使用 firebug 生成的 xpath 可能是 .// [@id='title'] 但使用 selenium ide 捕获时它可能是 (.// [@id='title'])[2])。您也可以选择生成绝对xpath并尝试。

于 2013-03-29T11:26:59.683 回答