Squeak.ru - шаблоны программирования

Доступ к значениям ячеек таблицы на странице участника групп Google с помощью Watir

Я ищу доступ к данным таблицы на веб-странице, которая кажется более сложной, чем другие методы, которые я видел опубликованными. Меня беспокоит то, что Watir видит часть HTML-кода, потому что, если вы сохраните страницу в виде HTML-файла, таблица и ее данные не будут включены.

Вот ситуация: в группах Google есть список участников (когда вы просматриваете настройки как администратор группы). Я хочу найти (или перебрать) таблицу, чтобы найти соответствие с адресом электронной почты. Когда это будет найдено, я бы выбрал строку (флажок), которая включает меню «Действия». В меню действий я бы обновил настройки доставки до «Нет электронной почты».

Я приложил скриншот страницы участников, а также фрагмент HTML.

Публикуйте предложения/ответы, относящиеся к таблицам групп Google. Я пробовал более 6 других подходов, которые работают на более простых HTML-страницах, но не в группах Google.

Спасибо

HTML (img)

Вот скриншот меню, к которому я пытаюсь получить доступ. Всплывающее меню действий (img)

До и после нажатия кнопки меню «Действия», чтобы открыть всплывающее меню.

До

<div tabindex="0" role="button" class="IVILX2C-n-a jfk-button-standard IVILX2C-k-c" aria-haspopup="true" aria-controls="gwt-uid-809" aria-expanded="false" aria-disabled="false" data-title="Actions">

После

<div tabindex="0" role="button" class="IVILX2C-n-a jfk-button-standard IVILX2C-k-c IVILX2C-n-a-selected IVILX2C-n-j" aria-haspopup="true" aria-controls="gwt-uid-809" aria-expanded="true" aria-disabled="false" data-title="Actions" aria-activedescendant="gwt-uid-819">

Обратите внимание, что значение «gwt-uid-xxx» не совпадает между сеансами.

Обновление: эти три строки, кажется, работают, чтобы щелкнуть меню «Действия», навести указатель мыши на «Изменить настройки доставки» и нажать «Нет электронной почты».

@driver.element(text: 'Actions').click
@driver.element(text: 'Change delivery setting').hover
@driver.div(class: 'popupContent', index: 1).div.div.div(text: 'No email').click

РЕДАКТИРОВАТЬ: код ниже

require 'rubygems'
require 'watir-webdriver'
require 'logger'
require 'csv'

def setup
  @driver = Watir::Browser.new :chrome

  # set the timeout for implicit waits
  @driver.driver.manage.timeouts.implicit_wait = 5

  #Create log file
  if @logger.nil?
    @logger = Logger.new( 'D:/Google Drive/_code/GroupsEmailSetting/ChangeDeliverySetting_log.txt',10)
    @logger.level = Logger::DEBUG
    @logger.datetime_format = '%Y-%m-%d %H:%M:%S%z'
  end

  #admin credentials
  @login_user = '[email protected]'
  @login_pwd = 'pwd!'

end

def teardown
  puts "Enter to close"
  a = gets.chomp
  @driver.quit
  @logger.close
end

def run
  setup
  yield
  teardown
end

run do

  @driver.goto "https://accounts.google.com"
  element = @driver.text_field(:id => "Email")
  element.send_keys(@login_user)
  @driver.button(:id => "next").click
 
  element = @driver.text_field(:id => "Passwd")
  element.send_keys(@login_pwd)
  @driver.button(:id => "signIn").click

  @logger.info "User logged in: #{@user}"


  #TEMP # find users, change email setting
  @domain = 'domain.com'
  @group = 'watir_table'
  @user = '[email protected]'
  @dsetting = 'No email'
  @logger.info("Group & User selected: #{@group + "@" + @domain + " : " + @user}")

  #END TEMP
  @driver.goto "https://groups.google.com/a/domain.com/forum/#!managemembers/#{@group}/members/active"


  @logger.info "Group loaded: #{@group}"

  browser.span(text: '[email protected]').parent.parent.checkbox.click

end


Ответы:


1

Это довольно распространенный шаблон, и было бы неплохо, если бы у нас был лучший способ решить его. Попробуйте что-то вроде этого:

[email1, email2, email3].each do |email_address|
    row = @driver.div(text: email_address).parent.parent
    row.checkbox.click
    row.div(text: 'All email').parent.parent.checkbox.click
end

browser.element(text: 'Change delivery setting').hover
browser.element(text: 'No email').click
10.07.2016
  • Когда я пытаюсь это сделать: browser.span(text: '[email protected]').parent.parent.checkbox.click я получаю "NameError: undefined local variable or method 'browser'. Когда я меняю браузер на @driver, я получаю Exception "unable to locate element, using {:text -> "[email protected]", :tag_name=> "span"} 10.07.2016
  • Обновите свой пост своим кодом. Если вы используете Watir, вам нужно что-то вроде: browser = Watir::Browser.new :chrome 10.07.2016
  • Я добавил свой код в основной пост. У меня есть команда, которую вы отметили. Пока что мой код работает до тех пор, пока не будет найдена таблица или элементы в таблице. 10.07.2016
  • Упс, это div, а не span Я смотрел на другой тд. 10.07.2016
  • Спасибо. Это сработало. Теперь, когда я могу найти адрес электронной почты и флажок, мне нужно найти столбец «Доставка». В конечном счете, логика моих сценариев будет ставить галочку только для тех электронных писем, которые расположены И имеют значение «Все электронные письма» в разделе «Доставка». Как добавить это условие? @driver.div(text: '[email protected]').parent.parent.div(text: 'All email').parent.parent.checkbox.click работает, но моему окончательному решению нужно будет перебрать список, поэтому не уверен, что это лучший подход. 10.07.2016
  • Кроме того, я могу вызвать меню «Действия», но не знаю, как выбрать «Изменить настройки доставки › Нет электронной почты». Я добавил скриншот в свой пост. 10.07.2016
  • @driver.element(text: 'Change delivery setting').hover не работает. Я получаю исключение, которое не может найти элемент». Единственное изменение, которое я заметил при наведении курсора на меню, — это изменение элемента DIV. Смотрите мой пост до и после. Спасибо. 11.07.2016
  • Еще одно добавление: я смог заставить работать HOVER, но раньше мне приходилось использовать @driver.element(text: 'Actions').click. Но, даже когда это работает, при переходе к команде «Нет электронной почты» она щелкает первое значение в таблице, а не значение в подменю. 11.07.2016
  • Похоже, эта последовательность работает. @driver.element(text: 'Actions').click @driver.element(text: 'Change delivery setting').hover @driver.div(class: 'popupContent', index: 1).div.div.div(text: 'No email').click 11.07.2016
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

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

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...