Как нажать кнопку, где класс одинаков для других вариантов? - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь click кнопку из списка, но эта кнопка имеет тот же класс, что и другие в списке, потому что они имеют одинаковое имя (btn ban-red), так как я могу нажать на нее, если вИнспектор У меня есть эта информация:

<a class=“btn ban-red” data-track-event=“navigate” data-track=name=“Jobylon” - Quality Engineer” href=“https://emp.jobylon.com/jobs/16654-f/” target=“_blank”>View job/a>

Инспектор копирует этот xpath:

/html/body/div[1]/div[4]/div/div/div/div[3]/div/div/div/div[1]/section/div/div[2]/div[1]/div[1]/article[14]/a

Но он не работает

Я также создал свой собственный xpathway:

wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@data-track-name=‘Jobylon - Quality Engineer’]"))).click();

Но тоже не работает

Я использую Selenium с Java и я в MacBook, спасибо за вашу помощь.

1 Ответ

0 голосов
/ 06 октября 2018

Абсолютный xpath не рекомендуется.Вы можете попробовать использовать относительный xpath.

  • Найти на основе текста элемента

    driver.findElement(By.xpath("//a[contains(.,'View job')]")).click()
    
  • Найти, используя комбинацию атрибута элемента, если классы не являются уникальными

    driver.findElement(By.xpath("//a[@class='btn ban-red'][@data-track-event='navigate']")).click()
    

    ИЛИ

    driver.findElement(By.xpath("//a[@class="btn ban-red"][@href='https://emp.jobylon.com/jobs/16654-f/']")).click()
    

Лучше использовать селектор CSS, так как он быстрее, чем xpath.Поэтому вы пытаетесь как

driver.findElement(By.cssSelector("a[class='btn ban-red'][data-track-event='navigate']")).click()

ИЛИ

driver.findElement(By.cssSelector("a[class="btn ban-red"][href='https://emp.jobylon.com/jobs/16654-f/']")).click()

Все еще сталкиваетесь с какой-то проблемой, например, элемент не виден или такого элемента нет, затем попробуйте с явными условиями ожидания, пока ваш элементстановится видимым или кликабельным.

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