【问题标题】:How to delete the default value in a text field and type a new value using Selenium WebDriver如何使用 Selenium WebDriver 删除文本字段中的默认值并键入新值
【发布时间】:2013-11-23 04:30:20
【问题描述】:

在我的应用程序中,我必须在文本字段中输入一些值。此文本字段包含一些默认值,因此首先我需要删除该值,然后键入新值,但既不能删除此值,也不能键入新值。 任何帮助将非常感激。 我试过以下代码:

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

【问题讨论】:

  • 您收到了哪些异常消息?
  • 什么都没有,它没有显示任何消息。
  • 意味着它不会编译?
  • 我不知道发生了什么。我在控制台中得到以下信息:Started InternetExplorerDriver server (32-bit) 2.35.3.0 Listening on port 31936 log4j:WARN No appenders could be found for logger (org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager) . log4j:WARN 请正确初始化 log4j 系统。 [[InternetExplorerDriver: WINDOWS 上的 Internet Explorer (9d6b5070-7fd2-4fcc-8ad9-3c8f39069d8e)] -> id: ctl00_ContentPlaceHolder1_txtAmt]
  • clear 方法应该可以工作。我认为您用于模拟占位符的 Javascript 正在妨碍您。我建议使用 html placeholder 属性

标签: java javascript html selenium selenium-webdriver


【解决方案1】:

您的代码看起来不错 - 我最近为 ASP.Net 应用程序编写了一个 Selenium 测试驱动程序,并且我的代码几乎与您的前三行代码相同(一直到“ctl00_ContentPlaceHolder1_...”;)。但这意味着为了帮助您,我们可能需要更多您的代码——比如如何创建“d1”——因为这可能是您真正遇到问题的地方。

话虽如此,我在查看自己的代码时注意到的第一件事是,我必须在以下表单中插入等待,只是因为试图与网页交互(这只是一个语句,ffDriver 是我的 FirefoxDriver 对象):

(new WebDriverWait(ffDriver, 100))
  .until(ExpectedConditions.presenceOfElementLocated(By.id("main-content")));

所以我的第一直觉是 Selenium 可能会在网页加载之前尝试查找元素(尽管 IIRC,如果是这样,您通常会得到更清晰的错误)。根据您更新的问题,从 Selenium 的角度来看,附加到元素的 JavaScript 的存在可能会减慢速度。

【讨论】:

  • 嗨,Emma,d1 只不过是 WebDriver。我也尝试了以下等待语句,但结果相同: WebDriverWait wait1 = new WebDriverWait(d1, 20); wait1.until(ExpectedConditions.visibilityOfElementLocated(By.id ("ctl00_ContentPlaceHolder1_txtAmt"))).click();
  • 您在我认为不正确的末尾有一个流浪的 .click()?此外,尝试增加超时时间 - ASP.Net 可能会非常缓慢地填满它的页面。我的等待设置为 100,所以我可能无法在较低的设置下使用它。
  • 嗨,Emma,我按照您的建议进行了更改,但结果仍然相同。我删除了那个 .click 并增加了时间。
【解决方案2】:
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");

【讨论】:

    猜你喜欢
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    相关资源
    最近更新 更多