2017-02-06 16 views
2

Я инженер по обеспечению качества программного обеспечения, и я пытаюсь создать автоматизированный тест для веб-страницы.Выбор различных веб-элементов в Selenium

Некоторые фона:

Рамки Селен, что моя компания использует только позволяет использовать пути X, сохраненные в качестве объекта затем использовать уже существующие методы, как «клик (SomeObject)» или «ввести (SomeObject)»и т.д. ...

Проблема:

в настоящее время я пытаюсь создать тест, который выбирает несколько кнопок, которые находятся на том же классе. Есть 6 кнопок набора, которые мне нужно выбрать. Теперь я могу это сделать, но с помощью:

`//*[@id="tenant-details-accordion"]/div[1]/div[2]/div/div[2]/div[1]/div/a 
//*[@id="tenant-details-accordion"]/div[1]/div[2]/div/div[2]/div[2]/div/a 
//*[@id="tenant-details-accordion"]/div[1]/div[2]/div/div[2]/div[3]/div/a 
//*[@id="tenant-details-accordion"]/div[1]/div[2]/div/div[2]/div[4]/div/a 
//*[@id="tenant-details-accordion"]/div[1]/div[2]/div/div[2]/div[5]/div/a 
//*[@id="tenant-details-accordion"]/div[1]/div[2]/div/div[2]/div[6]/div/a` 

-However это только временный, потому что тест потерпит неудачу позже вниз по дороге, когда кнопка удаляется ... Я разговаривал с командой разработчиков о добавлении Unique ID каждой кнопки. Но это не похоже, что это путь, который они хотят идти вниз ...

Возможное решение:

  • Можно сузить «сферу» селена?
    Например, говоря Селену, чтобы просмотреть конкретный класс вместо всей страницы?
    -Мы думаем, что он ищет класс, соответствует определенному тексту, а затем выберите «Установить».
  • Если да, то также возможность комбинирования нескольких X-путь в Что-то вроде ....

    //div[@class='col-sm-4'].... //div[contains(.,'Birth Date: Set +')]

Моя мысль в том, что я мог бы создать Xpath, что сужает что Selenium будет фактически просматриваться ..

  1. Поиск класса
  2. поиск по тексту "Дата рождения"
  3. Выбор Set Button

Вот несколько фотографий: FRONT END

Вот некоторые HTML, когда я инспектировать страницу с HTML CODE

ответ

1

Вы хотел бы что-то вроде этого:

//div[@class='col-sm-4'][.//*[contains(text(), 'Birth Date')]]//a 

Значение означает ссылку с div, которая имеет class со значением col-sm-4 и содержит указанный текст.

Или это может также работать как это:

//div[contains(text(), 'Birth Date')]/a 
1

Я полагаю, вы уже спрашивали об этом, и мы ответили на него.

Но вот несколько решений:

  1. //div[@class='col-sm-4' and contains(text(),'Birth Date')]/div/a

  2. //div[contains(@class,'col-sm-4') and contains(text(),'Birth Date']//a

есть много других вариантов. Попробуйте посетить w3schools.com, чтобы узнать больше о xpath.

1

Чтобы сначала найти div с классом 'col-sm-4' и текст как 'Дата рождения:', а затем найти ссылку с текстом 'Set +' под ней, любой из следующих XPATH может можно использовать:

//div[@class='col-sm-4' and contains(text(),'Birth Date')]/descendant::a[1] 

Или

//div[@class='col-sm-4' and contains(text(),'Birth Date')]/descendant::a[contains(text(),'Set +')][1] 

Или

//div[@class='col-sm-4' and contains(text(),'Birth Date')]/descendant::a[text()='Set +'][1] 
+0

почему использование потомка вместо ' // '? – becixb

+0

Xpath // div [@ class = 'col-sm-4' и содержит (текст(), 'Дата рождения')] // a [1] также должен работать. Однако в случае, если по какой-либо причине это не сработает, тогда потомок может быть использован для поиска нужной ссылки. – Mahipal

Смежные вопросы