在我的应用程序中,我必须在文本字段中键入一些值。此文本字段包含一些默认值,因此首先我需要删除该值,然后键入新值,但既不能删除此值也不能键入新类型的新值。 任何帮助将非常感激。 我试过以下代码:
WebElement samount=d1.findElement(By.id("ctl00_ContentPlaceHolder1_txtAmt"));
System.out.println(samount);
samount.clear();
samount.sendKeys("100");
我也试过这个:
WebElement searchField=d1.findElement(By.id("ctl00_ContentPlaceHolder1_txtAmt"));
System.out.println(searchField);
searchField.click();
searchField.clear();
searchField.sendKeys(Keys.BACK_SPACE );
searchField.sendKeys(Keys.chord(Keys.CONTROL, "a"));
searchField.sendKeys(Keys.DELETE);
searchField.sendKeys("100");
searchField.click();
以下是我的网页的HTML:
<table cellspacing="6" cellpadding="6" style="width: 100%;">
<tbody>
<tr>
<tr>
<td style="text-align: center;" colspan="2">
<br>
<table width="100%" style="text-align: center;">
<tbody>
<tr>
<tr>
<td id="ctl00_ContentPlaceHolder1_tdFirst" style="width:35%;"> </td>
<td style="text-align: right;">
<td style="text-align: left;">
<input id="ctl00_ContentPlaceHolder1_txtAmt" class="txtAlpha" type="text" style="width:100px;" onblur="checkSender();" onkeypress="if (WebForm_TextBoxKeyHandler(event) == false) return false;AmountOnly();" onchange="javascript:setTimeout('__doPostBack (\'ctl00$ContentPlaceHolder1$txtSenderAmt\',\' \')', 0)" maxlength="10" value="0.00" name="ctl00$ContentPlaceHolder1$txtSenderAmt">
答案 0 :(得分:1)
你的代码看起来没问题 - 我最近为ASP.Net应用程序编写了一个Selenium测试驱动程序,我的前三行代码几乎相同(直到“ctl00_ContentPlaceHolder1 _...”;)。但这意味着为了帮助您,我们可能需要更多代码 - 比如“d1”是如何创建的 - 因为这可能是您实际遇到问题的地方。
话虽如此,我注意到我自己的代码的第一件事就是我必须在下面的表单中插入一个等待,因为尝试与网页交互(这是一个语句,{{1} }是我的FirefoxDriver对象):
ffDriver
所以我的第一直觉是Selenium可能在网页加载之前试图找到该元素(尽管IIRC,如果是这样,你通常会得到更明确的错误)。根据您更新的问题,附加到元素的JavaScript的存在可能会减慢Selenium的观点。
答案 1 :(得分:1)
WebDriverWait wait = new WebDriverWait(driver, 18);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("ctl00_ContentPlaceHolder1_txtAmt")));
driver.findElement(By.id("ctl00_ContentPlaceHolder1_txtAmt")).clear();
driver.findElement(By.id("ctl00_ContentPlaceHolder1_txtAmt")).sendKeys("Enter-New-Text");