如何使用 Java 在 Selenium 中的以下 HTML 代码中定位 WebElement?

How to locate the WebElement in following HTML code in Selenium using Java?

嗨,我有以下 HTML 的片段:

<tr rowid="0" class="addedrow rowselected datarow rowfocus">
....

<td positionindex="3" class="primary required">
    <input type="text" class="editablecell" size="15">
</td>

<td positionindex="4" class="required">
    <div class="select2-container editablecell" id="s2id_autogen1" style="width: 99%;" title="">
        <a href="javascript:void(0)" onclick="return false;" class="select2-choice select2-default" tabindex="-1"> 
        </a>
    </div>
</td>

....

我必须在 <input type="text" class="editablecell" size="15"> 文本字段中插入文本。我在 Java.

中使用 Selenium 定位这个特定的 WebElement 时遇到困难

我试过了

 WebElement box = driver.findElement(By.xpath("//input[(@type='text') and 
(@class='editablecell')]"));

基于答案

注意:该元素的结构如下:

<html> ....
     <body> ...
         <div id=topLeveWrapper> ...
              <div id=header>  ...
              <div id=contentFrame>  ...
                  <div id=leftSite>  ...
                  <div id=rightSite> ...
                      <div id=pageID_123456> ...
                          <div id=gridViewID_98765> ...
                              <div id=tableWrapper> ...
                                  <div id=twHEADER> ...
                                  <div id=twBODY>   ...
                                      <table >
                                          <thead> ...
                                          <tbody>
                                              <tr rowid=0 ...>
                                                  <td positionindex="3" class ="primary required"> <input type="text" class="editablecell" size="15">
                                                  </td>
                                              ....
                                              </tr> 
                                             ......................

抛出的异常是:

Exception in thread "main" org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//input[@type='text' and @class='editablecell']"}
  (Session info: chrome=..)

信息:

For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html

有人可以指导我吗?

谢谢

尝试以下 xpath

 WebElement box = driver.findElement(By.xpath("//input[@type='text' and @class='editablecell']"));

您可以简单地使用这个 xpath 表达式 driver.findElement(By.xpath("//input[@class='editablecell']"))

我正在回答我自己的问题,因为我尝试了以下方法来定位元素并且效果很好。这可能不是定位元素的最佳方式,但是,由于我的 XPATHSelenium 知识有限,我只能这样做。正如问题中的 HTML 结构所示,我从更高级别的元素开始,深入到我想要的元素:

driver.findElement(By
            .xpath("//div[@class='fht-tbody']/table/tbody/tr[@rowid='0']/td[@positionindex='3']/input")); 

我很感激在许多方面纠正了我的问题的评论,所有的评论和答案都对我有帮助并引导我找到了解决方案,我希望看到更好的方法来解决这个问题。

谢谢大家!