RSelenium: Почему я не могу отправить пароль в это (Java?) Поле входа? - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь очистить этот веб-сайт с помощью RSelenium. Отправка текста в другие элементы работает, но поле логина сводит меня с ума. Я думаю, это может быть потому, что он находится в Java (по крайней мере, селекторы css в SelectorGadget говорят .j_username и .j_password), но я не могу понять, как с этим бороться.

Я бы не прочь войти в систему вручную, но я также не могу понять, как это работает =).

remDr <- RSelenium::remoteDriver(remoteServerAddr = "localhost",
                                     port = 4445L,
                                     browserName = "chrome")
    remDr$open()

remDr$navigate("https://smd.ch/SMDView/log/index.jsp")
login_name <- remDr$findElement(using = "xpath", "//*[contains(concat( ' ', @class, ' ' ), concat( ' ', 'j_username', ' ' ))]")
login_name$clickElement()
login_name$clearElement()
login_name$clickElement()
login_name$sendKeysToElement(list("xxxxxxx"))
login_pw <- remDr$findElement(using = "xpath", "//*[contains(concat( ' ', @class, ' ' ), concat( ' ', 'j_password', ' ' ))]")
login_pw$click()
login_pw$clearElement()
login_name$click()
login_pw$sendKeysToElement(list("xxxxxxx", "\uE007"))
remDr$screenshot(display = TRUE)

Ответы [ 3 ]

1 голос
/ 18 июня 2020

Кажется, проблема xpath. Попробуйте выполнить xpath для username и password.

//div[@class='login_screen']//input[@name='j_username']

//div[@class='login_screen']//input[@name='j_password']
1 голос
/ 18 июня 2020

Похоже, вы были достаточно близко. Возможно, стратегии локатора , которые вы использовали, идентифицируют несколько элементов и, следовательно, вызовы clearElement(), clickElement() и sendKeysToElement() пытались взаимодействовать с первым совпадающим элементом в

<div class="login_mobile">

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

<div class="login_screen">

Решение

Для взаимодействия с полями входа вы можете использовать любую из следующих Стратегий локатора :

  • cssSelector

    • Benutzername поле:

      div.login_screen input.inputfield.j_username[name='j_username']
      
    • Пароль поле:

      div.login_screen input.inputfield.j_password[name='j_password']
      
  • xpath :

    • Benutzername поле:

      //div[@class='login_screen']//input[@class='inputfield j_username' and @name='j_username']
      
    • Passwort поле:

      //div[@class='login_screen']//input[@class='inputfield j_password' and @name='j_password']
      
1 голос
/ 18 июня 2020

Страница содержит несколько логинов, по крайней мере, один для мобильного и один для настольного компьютера. В зависимости от смоделированного размера экрана / пользовательского агента виден только один логин, другой - невидимый. Чтобы получить вход для настольного компьютера, используйте следующие выражения xpath:

//*/div[@class='login_screen']//*[contains(@class,'j_username')
//*/div[@class='login_screen']//*[contains(@class,'j_password')

Общий совет по тестированию выражений xPath: откройте веб-страницу, которую вы хотите очистить, в Google Chrome, откройте инструменты разработчика, переключитесь в консоль таб. Затем введите: $ x ("XPATH"), замените XPATH на свое выражение XPath, которое вы хотите проверить, и нажмите Enter. Chrome покажет вам результаты для активной веб-страницы, и вы даже можете щелкнуть по ним, а Chrome будет выделять результаты или нет (если они невидимы). Такое тестирование выражений XPath перед их использованием в коде экономит много времени; -)

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