Как найти элемент относительно другого элемента через селен и питон - PullRequest
0 голосов
/ 03 мая 2018
<div class="block-inner">
    <div class="form-group">
        <label>Username</label>
        <input type="text" name="username" class="required form-control" value="" placeholder="Enter your username...">
    </div>
    <div class="form-group w_margin">
        <label>Password</label>
        <input name="password" type="password" class="required form-control" style="" placeholder="Enter your password...">
    </div>
</div>

Контекст

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

driver = webdriver.Chrome()
driver.get("https://account.genndi.com/login")
element = "//label[contains(text(),'')]" #xpath

dictCredentials = {'Username':'abcdef', 'Password':'123'}
for clas in driver.find_elements_by_xpath(element):
    text = clas.text
    if text in dictCredentials.keys():
        inputbox = #please help here get corresponding input element
        inputbox.send_keys(dictCredentials[text])

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

Ответы [ 4 ]

0 голосов
/ 04 мая 2018

Просто используйте "by_name" locator =)

user = {"name": "Alex", "password": 'pass'}
driver.find_element_by_name("username").send_keys(user.name)
driver.find_element_by_name("password").send_keys(user.password)

Если вы действительно хотите найти текст «Имя пользователя» в родительском элементе - у вас есть несколько других вариантов:

Сначала нужно найти элемент-обертку, который содержит определенный текст, и найти в нем входные данные:

self.driver.find_element_by_xpath("//*[label[text()='Username']]/input").send_keys("name")
self.driver.find_element_by_xpath("//*[label[text()='Password']]/input").send_keys("pass")

Или поиск родственного элемента:

self.driver.find_element_by_xpath("//label[text()='Username']/following-sibling::input[1]").send_keys("pass")
self.driver.find_element_by_xpath("//label[text()='Password']/following-sibling::input[1]").send_keys("pass")
0 голосов
/ 03 мая 2018

Для этого позвольте мне объяснить, как вы собираетесь это сделать.

Итак, сначала вам нужно получить элемент имени пользователя. Вы уже сделали это с:

element = driver.findElement(by.xpath("//label[contains(text(),'')]"));

То, что вы также можете сделать, это получить родительский элемент напрямую, сказав:

element = driver.findElement(by.xpath("//label[contains(text(),'Username')]/.."));

С /.. вы получаете предка элемента label с текстом Username

Теперь, когда вы нашли элемент, внутри которого находится ваш вход, вы можете сказать:

inputElement = element.findElement(by.xpath("./input"));

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

0 голосов
/ 03 мая 2018

В соответствии с HTML , которым вы поделились, найдите теги <label> с текстом Имя пользователя и Пароль и перейдите к следующему элементу, чтобы заполнить значение Вы можете создать функцию, которая будет принимать текст тега <label> и text-to-send в качестве двух аргументов и заполнять следующий <input> следующим образом:

def fillUp(labelText, inputValue):
    driver.find_element_by_xpath("//label[.='" + labelText + "']//following::input[1]").send_keys(inputValue)

Теперь вы можете вызывать эту функцию из любого места в вашем скрипте следующим образом:

fillUp("Username", "Chandrasekar ")
fillUp("Password", "Subramanian")
0 голосов
/ 03 мая 2018

Вы можете получить его с помощью этого псевдо-пути:

//*[@name='username']

Тогда:

  //*[@name='password']

«Переместить» вы можете с помощью своего кода, используя следующий шаблон:

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