Selenium как найти по идентификатору элемента - PullRequest
0 голосов
/ 12 января 2019
<button id="attachment-trigger-ember1000" class="msg-form__footer-action button-tertiary-medium-round-muted m0" type="button" style="" xpath="1">
  <span class="visually-hidden">Attach a file</span>
  <li-icon aria-hidden="true" type="paperclip-icon"><svg viewBox="0 0 24 24" width="24px" height="24px" x="0" y="0" preserveAspectRatio="xMinYMin meet" class="artdeco-icon" focusable="false"><path d="M8,6h9.5c3,0,5.5,2.5,5.5,5.5S20.5,17,17.5,17H5c-2.2,0-4-1.8-4-4s1.8-4,4-4h9.5c1.4,0,2.5,1.1,2.5,2.5S15.9,14,14.5,14H8v-2h6.5c0.3,0,0.6-0.1,0.6-0.4c0,0,0,0,0-0.1c0-0.3-0.3-0.5-0.5-0.5c0,0-0.1,0-0.1,0H5c-1-0.1-2,0.6-2.1,1.6c0,0.1,0,0.3,0,0.4c-0.1,1,0.7,1.9,1.7,2c0.1,0,0.3,0,0.4,0h12.6c1.9,0,3.5-1.5,3.5-3.3c0-0.1,0-0.1,0-0.2c0-1.9-1.4-3.4-3.3-3.5c-0.1,0-0.1,0-0.2,0H8V6z" class="large-icon" style="fill: currentColor"></path></svg></li-icon>
</button>

Выше приведен фрагмент кода HTML

и я пытаюсь использовать следующий xpath:

driver.findElement(By.xpath("//*[@id=\"attachment-trigger-ember1000\"]")).click();

но это не работает.

Сообщение об ошибке:

element not found exception

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Поскольку требуемый элемент является элементом Ember.js , атрибут id имеет значение dynamic , и вам нужно вызвать WebDriverWait , и вы можете использовать либо из следующих решений:

  • cssSelector:

    WebElement myButton = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("button.msg-form__footer-action.button-tertiary-medium-round-muted.m0[id^='attachment-trigger-ember']")));
    
  • xpath

    WebElement myButton = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@class='msg-form__footer-action button-tertiary-medium-round-muted m0' and starts-with(@id, 'attachment-trigger-ember')]")));
    
0 голосов
/ 12 января 2019

Вы, вероятно, хотите использовать By.id вместо: https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/By.html#id-java.lang.String-

driver.findElement(By.id("attachment-trigger-ember1000")).click();
...