NameError: имя 'btn' не определено при поиске элемента XPATH с использованием Selenium - PullRequest
0 голосов
/ 19 декабря 2018

Эта информация Xpath и селектора, скопированная из инспектора элементов хрома:

<button class="btn btn-white btn--no-margin btn--full-width _1XvaFLD3_IpAQNG-OJU2-H _1xNlj_ScH8hEMWzrkRt1A">Sign up</button>

CssSelector:

#main > div > div.Root__top-container.Root__top-container--has-notice-bar > div.Root__nav-bar.Root__nav-bar--has-notice-bar > nav > div.navBar-signupPrompt._3nonY0buM5Z1AF4aRrP8VY > p:nth-child(1) > button

, которую я пытался найти:

button = wd.find_element(By.XPATH("//button[contains(text(),'"+btn-white+"')]"))

Что возвращает ошибку:

NameError: name 'btn' is not defined

Я нашел этот , который показывает мне, как найти по частичному имени.

Любая помощь будет оценена.

Ответы [ 4 ]

0 голосов
/ 19 декабря 2018

Это сообщение об ошибке ...

NameError: name 'btn' is not defined

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

В соответствии с предоставленным вами HTML-кодом:

<button class="btn btn-white btn--no-margin btn--full-width _1XvaFLD3_IpAQNG-OJU2-H _1xNlj_ScH8hEMWzrkRt1A">Sign up</button>

Ваши испытания кода проходили в правильном направлении.Но выражение:

button = wd.find_element(By.XPATH("//button[contains(text(),'"+btn-white+"')]"))

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

NameError: name 'btn-white' is not defined

Подобный случай имел место для ошибки:

NameError: name 'btn' is not defined

Решение

Таким образом, эффективное решение будет использоватьлюбой из следующих Стратегий Локатора :

  • xpath :

    button = wd.find_element(By.XPATH("//button[contains(@class,'btn-white') and text()='Sign up']"))
    
  • xpath :

    button = wd.find_element(By.XPATH("//button[contains(@class,'btn--no-margin') and text()='Sign up']"))
    
  • xpath :

    button = wd.find_element(By.XPATH("//button[contains(@class,'btn--full-width') and text()='Sign up']"))
    
  • xpath :

    button = wd.find_element(By.XPATH("//button[contains(@class,'btn--full-width') and contains(@class,'btn--no-margin')][text()='Sign up']"))
    
0 голосов
/ 19 декабря 2018

Попробуйте с:

wd.find_element(By.XPATH("//button[contains(text(),'Sign up')]"))
0 голосов
/ 19 декабря 2018

btn-white - это класс в элементе button, а не текст.И вы не можете использовать его как переменную, он должен быть str параметр

button = wd.find_element_by_class_name('btn-white')

или

button = wd.find_element(By.CLASS_NAME, 'btn-white')

Если вы хотите найти по Sign up text

button = wd.find_element(By.XPATH, '//button[.="Sign up"]')
0 голосов
/ 19 декабря 2018

У вас работает лучше?

button = wd.find_element(By.XPATH("//button[text()='Sign up']"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...