0

这是我的示例 html 代码。

<div class="content">
<M class="mclass">
   <section id="sideA">
       <div id="mainContent"> 
           <div class="requestClass"> 
              <span>Check</span>
              <input type="text" id="box">
           </div>
       </div>
   <section>
   <section id="sideB">
      ...
   <section>
</M>
</div>

我想为我的文本字段(“框”)设置一些值。所以我厌倦了像下面的代码那样设置

driver.findElement(By.xpath("...")).sendKeys("SetValue");

我的 Xpath id 是正确的,它存在于页面中,但出现此错误

no such element: Unable to locate element: {"method":"xpath","selector":"id("..."}

为什么由于我的自定义标签而出现此错误,如果是,如何在自定义标签中获取元素?

4

3 回答 3

1

根据HTML您提供的为您所代表的文本字段填写一些值,<input type="text" id="box">您可以使用以下任一代码行:

  1. cssSelector

    driver.findElement(By.cssSelector("section#sideA input#box")).sendKeys("SetValue");
    
  2. xpath

    driver.findElement(By.xpath("//section[@id='sideA']//input[@id='box']")).sendKeys("SetValue");
    
于 2017-10-09T09:30:50.697 回答
0

您可以使用IDxpath来定位它,我的建议是您必须使用ID. 还使用显式等待元素可见。

使用ID,你的代码是这样的:

WebElement elem= driver.findElement(By.id("box"));
WebDriverWait wait=new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOf(elem));
elem.sendKeys("test");

你也可以使用JavascriptExecutor

WebElement elem= driver.findElement(By.id("box"));
WebDriverWait wait=new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOf(elem));
JavascriptExecutor myExecutor = ((JavascriptExecutor) driver);
myExecutor.executeScript("arguments[0].value='test';", elem);
于 2017-10-08T06:52:42.537 回答
0

如果您仍想使用 XPath。这对我有用-

 driver.FindElement(By.XPath(@"//*[@id='box']")).SendKeys("AB‌​");

我不认为自定义标签会导致任何问题,因为 CssSelector 也可以使用 -

driver.FindElement(By.CssSelector(@"m[class='mclass'] input")).SendKeys("AB");
于 2017-10-07T18:13:46.437 回答