Управлять xpath с помощью переменных - PullRequest
0 голосов
/ 27 февраля 2019

Итак, у меня есть код, в котором пользователь вводит переменную цвета, и строка для нее называется цветом.Пример ссылки - https://www.supremenewyork.com/shop/jackets/k56l3oteu/hjylineo1.Итак, затем я пытаюсь найти его на веб-сайте, используя

driver.find_element_by_xpath("//a[@data-style-name='{}'".format(color.get()))

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

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Вы можете использовать строковые форматы ниже, но в вашем xpath есть ошибка - отсутствует ] в конце:

driver.find_element_by_xpath("//a[@data-style-name='{}']".format(color.get()))
driver.find_element_by_xpath("//a[@data-style-name='{0}']".format(color.get()))
driver.find_element_by_xpath("//a[@data-style-name='%s']" % color.get())
0 голосов
/ 27 февраля 2019

Попробуйте использовать следующий селектор CSS, чтобы идентифицировать элемент:

'p.style.protect'

Похоже, это уникально идентифицирует элемент, который показывает, какой цвет выбран.

Тогда ваш цвет сохраняется во внутреннем HTML-элементе, так что вы можете получить его с помощью чего-то вроде

chosenColor = 
driver.find_element_by_css_selector('p.style.protect').text()

ОК, теперь я понимаю, что вы хотите использовать xPathдинамически выбирать элемент на основе цвета.Я заметил, что xPath

'//*[@id="details"]/ul/li[4]/a[1]'

находит верхний правый элемент,

'//*[@id="details"]/ul/li[4]/a[2]'

находит средний правый элемент и так далее ...

Таким образом, еслиВы можете просто использовать карту для сопоставления цветов с числами, что-то вроде

colorMap = {
    "brown" : 1,
    "cyan" : 2,
    "grey" : 3,
    ...
}

(не уверен, что цвета совпадают правильно в моем примере, но надеюсь, что вы поняли)

Тогда,

driver.find_element_by_xpath('//*[@id="details"]/ul/li[4]/a[' + 
'colorMap.("<whatever color you are looking to select>")' + ]').click()

следует выбрать элемент с указанным вами цветом.

Это полезно?Дайте мне знать, если у вас есть какие-либо вопросы.

...