Элемент не виден ошибка с XPath - PullRequest
0 голосов
/ 13 мая 2018

У меня проблема с XPath.

Я могу использовать этот xpath: //*[@id='name']//*[@class='class']//div[1] -> могу работать нормально.

Но я хочу использовать div [2] ex: //*[@id='name']//*[@class='class']//div[2], это выдает ошибку, что элемент не видно. Кто-нибудь, помогите мне, плз, я не знаю, почему div [1] может работать, но div [2] не видимый .

Мой HTML код здесь:

<div class="class">
      <div class="action-item" data-id="24" data-actioncode="STT">
             <a href="#"><i class="fa fa-play"></i></a>
                                S T T
      </div>
      <div class="action-item" data-id="29" data-actioncode="FULL">
              <a href="#"><i class="fa fa-play"></i></a>
                                FULL
      </div>
      <div class="action-item" data-id="30" data-actioncode="TEACHER">
              <a href="#"><i class="fa fa-play"></i></a>
                               TEACHER
      </div>
</div>  

Код, который я пробовал:

WebElement btnElement = driver.findElement(By.xpath("//[@id='name']//[@class='class']//div[2]"));  
WebDriverWait wait= new WebDriverWait(driver,10 ); 
wait.until(ExpectedConditions.visibilityOf(btnElement)); 
btnElement.click();

Ответы [ 4 ]

0 голосов
/ 14 мая 2018

Вы можете использовать класс action-item для проверки.

используйте x-path для определения имени класса, а затем выполните n-й дочерний элемент:

xpath("//[@id='name']//[@class='class']//[@class='action-item']:nth-child(2)"));

или вы также можете использовать значение индекса, так как они находятся в одном классе. разница в том, что значение индекса для второго элемента будет 1.

альтернативно, вы также можете использовать cssContainText для идентификации по тексту.

0 голосов
/ 13 мая 2018

Вы можете попробовать этот код :

new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@data-actioncode='FULL']")));
driver.findElement(By.xpath("//div[@data-actioncode='FULL']")).click();
0 голосов
/ 13 мая 2018

В соответствии с HTML, которым вы поделились, чтобы щелкнуть элемент с текстом FULL , вам нужно настроить WebDriverWait , чтобы элемент был активным, и вы можете использовать любой из следующих локаторы:

  • css_selector (на основе атрибутов):

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("div.class div.action-item[data-actioncode='FULL']"))).click();
    
  • xpath (на основе атрибутов):

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='class']//div[@class='action-item' and @data-actioncode='FULL']"))).click();
    
  • xpath (на основе текста):

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='class']//div[@class='action-item'][normalize-space()='FULL']"))).click();
    
0 голосов
/ 13 мая 2018

Вы можете использовать путь селектора CSS, как и для div 2:

div.action-item:nth-child(2)

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...