Как нажать кнопку, когда все элементы одинаковы, кроме innerText - PullRequest
0 голосов
/ 04 марта 2020

Привет, я новичок в тестировании автоматизации и застрял при нажатии на кнопку с тем же именем класса. Я хочу нажать на указанную c кнопку, когда все классы и идентификатор одинаковы для всех разделов.

<div class="race-category-block">
<div class="info-block race-detail-block">
<a href="organizer-view-race?race=38"><div class="about-race">
<p class="race-name">Vsd</p>
<div class="date-location has-v-line-group">
<span class="has-v-line">28-01-2020 </span>
<span class="has-v-line no-v-line">Chennai</span>
<span style="display:none" id="raceDirectorName">Raajesh</span>
</div>
</div>
</a>
<div class="race-detail-status"></div>
<div class="race-detail-button-block">
<button class="btn btn-outline add-race" data-value="38">Add a race</button>
</div>
</div>
</div>

Данный раздел повторяется несколько раз

`Здесь я хочу нажать кнопку в теге кнопки« Добавить гонку », используя текст в ВСД

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

Ответы [ 6 ]

0 голосов
/ 05 марта 2020

На самом деле это сработало для меня

Event_name=driver.find_element_by_xpath("//p[text()='Vsd']")
Event_name.find_element_by_xpath("//button[@class='btn btn-outline add-race']").click()
0 голосов
/ 05 марта 2020

Вы можете использовать локатор XPath, чтобы нажать нужную кнопку

//p[text()='Vsd']//following::button
0 голосов
/ 04 марта 2020

Поскольку желаемый элемент имеет уникальный текст Добавьте расу , чтобы найти и click() на элементе, который вы должны вызвать WebDriverWait для elementToBeClickable () и вы можете использовать одну из следующих Стратегий локатора :

  • Использование Java и xpath с innerText :

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@class='btn btn-outline add-race' and text()='Add a race']"))).click();
    
  • Использование Python и CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.race-detail-button-block>button.btn.btn-outline.add-race"))).click()
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 04 марта 2020

Я думаю, что вы можете использовать следующий xpath для поиска по тексту в элементе Vsd и нажать соответствующую кнопку «Добавить расу».

Xpath, который можно использовать:

"//p[@class='race-name' and text()='Vsd']/parent::div/parent::a/following-sibling::div/button"
0 голосов
/ 04 марта 2020

Вы можете создать массив всех элементов с одинаковым идентификатором.

IList<IWebElement> Buttons = driver.FindElements(By.CssSelector("button.btn.btn-outline.add-race"));

И после того, как вы нажмете любую из этих кнопок, вы можете написать в консоли, сколько кнопок вызывается, и вы может позже нажать еще раз.

Buttons[1].Click();
Buttons[2].Click();
0 голосов
/ 04 марта 2020

вы можете использовать индекс Xpath:

this.driver.findElement(By.xpath("/html/body/div/div/div[2]/button")).click();

. Пожалуйста, перекрестно проверьте значение XPath, вы можете использовать chrome для идентификации XPath с помощью: 1. щелкните правой кнопкой мыши по кнопке 2. выберите осмотреть 3 . на правой странице элемента вам нужно щелкнуть правой кнопкой мыши на элементе и скопировать -> полный XPath

, обратите внимание, что использование XPath не рекомендуется, потому что автоматизация будет нарушена, если какие-либо изменения будут сделаны в HTML структура.

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