无法替换表列中的值

时间:2017-11-21 12:55:39

标签: java selenium settext

无法在表列中发送值。当我尝试使用Selenium在列中插入值时,我遇到了不同的错误。

  1. 我尝试在表格的列中设置新值。它显示错误,因为元素必须是用户可编辑的才能清除它。

    WebElement.clear();
    WebElement.sendKeys("value");
    
      (or)
    
    WebElement.sendKeys(Keys.DELETE);
    WebElement.sendKeys("value");
    
  2. 然后单击并编辑该值。

    Actions actions = new Actions(getWebDriverEx());
    WebElement TableColumn = Driver.findElement(By.id("element"));
    actions.moveToElement(TableColumn);
    actions.click().build().perform();
    actions.sendKeys(Keys.BACK_SPACE+b+b);
    actions.sendKeys("value");
    

    传递的值未插入Tables列中。但我可以单击Tables列。我的测试通过了。

  3. 然后尝试设置值。它将错误显示为超时。

     WebElement.sendKeys(Keys.DELETE);
     WebElement.sendKeys("15000");
    
  4. 我再次使用div / span组合作为XPath,我编辑了值。但它没有反映在表格中。

    JavascriptExecutor js = (JavascriptExecutor) getDriver();
    js.executeScript("document.getElementById('element').innerHTML="+15000); 
    
  5. 这里我没有任何错误。但保存后没有反映出价值。

    我给各种格式的元素。

    1. DIV // [ID]
    2. DIV //跨度
    3. 的XPath
    4. 单独
    5. id(在div中)
    6. HTML:

      <div id="element" class="tables_second_column">
          <div class="class_name">
              <div class="class_name">
                  <div class="class_name"><span>5000</span></div>
              </div>
          </div>
      </div>
      

4 个答案:

答案 0 :(得分:1)

根据您分享的HTML,表格列位于 <span> 内,该列位于多个<div>标记内。因此,我们需要构建一个唯一的 xpath 来识别 WebElement 并首先发送 clear() 方法然后使用 sendKeys() 方法,如下所示:

driver.findElement(By.xpath("//div[@id='element']/div[@class='class_name']/div[@class='class_name']/div[@class='class_name']/span[text()='5000']")).clear();    
driver.findElement(By.xpath("//div[@id='element']/div[@class='class_name']/div[@class='class_name']/div[@class='class_name']/span[text()='5000']")).sendKeys("15000");

更新

正如您所提到的Text which was passed in the span is not predictable所以我们只是省略了[text()='5000']条款。由于您提供了样本为HTML的示例classnames,因此我构建了一个几乎绝对的xpath。所以我们的代码将是:

driver.findElement(By.xpath("//div[@id='element']/div[@class='class_name']/div[@class='class_name']/div[@class='class_name']/span")).clear();    
driver.findElement(By.xpath("//div[@id='element']/div[@class='class_name']/div[@class='class_name']/div[@class='class_name']/span")).sendKeys("15000");

答案 1 :(得分:1)

尝试以下内容,它对我有用:

js = "document.querySelector('#element .class_name .class_name .class_name>span').innerHTML = '15000';"
driver.execute_script(js)

希望它可以帮到你!

答案 2 :(得分:1)

这应该足够了

WebElement textBox = driver.findElement(By.xpath("//span[text()='5000']"));
textBox.clear();
textBox.sendKeys("");
textBox.sendKeys("15000");

我发送一个空格,以便让文本框处于活动状态,因为DOM可能不会立即反映,因为此元素是静默嵌套的。

答案 3 :(得分:0)

感谢您的回复

使用以下方法对我有用

webElement.sendKeysByAction(value)