如何在 Chrome Web 驱动程序中获取自定义标签中的元素

how to get element inside custom tag in chrome web driver

提问人:KSK 提问时间:10/8/2017 更新时间:1/5/2019 访问量:4590

问:

这是我的示例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("..."}

为什么我因为我的自定义标签而收到此错误,如果是,如何获取自定义标签中的元素?

selenium selenium-webdriver webdriver chrome-web-driver

评论

1赞 Grasshopper 10/8/2017
包括完整的 XPath。您不使用 id 的任何原因...
1赞 amitbobade 10/8/2017
尝试使用 Id?
2赞 krokodilko 10/8/2017
你为什么不用?只:iddriver.findElement(By.id("box").sendKeys("SetValue");

答:

0赞 amitbobade 10/8/2017 #1

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

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

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

driver.FindElement(By.CssSelector(@"m[class='mclass'] input")).SendKeys("AB");
0赞 iamsankalp89 10/8/2017 #2

您可以使用或找到它,我的建议您必须使用。此外,请使用 Explicit wait till 元素以使其可见。IDxpathID

使用 ,您的代码如下所示: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);
1赞 undetected Selenium 10/9/2017 #3

根据您提供的向文本字段填写一些值,您可以使用以下任一代码行: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");