Я ищу доступ к данным таблицы на веб-странице, которая кажется более сложной, чем другие методы, которые я видел опубликованными. Меня беспокоит то, что Watir видит часть HTML-кода, потому что, если вы сохраните страницу в виде HTML-файла, таблица и ее данные не будут включены.
Вот ситуация: в группах Google есть список участников (когда вы просматриваете настройки как администратор группы). Я хочу найти (или перебрать) таблицу, чтобы найти соответствие с адресом электронной почты. Когда это будет найдено, я бы выбрал строку (флажок), которая включает меню «Действия». В меню действий я бы обновил настройки доставки до «Нет электронной почты».
Я приложил скриншот страницы участников, а также фрагмент HTML.
Публикуйте предложения/ответы, относящиеся к таблицам групп Google. Я пробовал более 6 других подходов, которые работают на более простых HTML-страницах, но не в группах Google.
Спасибо
Вот скриншот меню, к которому я пытаюсь получить доступ. Всплывающее меню действий (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
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.2016browser = Watir::Browser.new :chrome
10.07.2016div
, а неspan
Я смотрел на другой тд. 10.07.2016@driver.div(text: '[email protected]').parent.parent.div(text: 'All email').parent.parent.checkbox.click
работает, но моему окончательному решению нужно будет перебрать список, поэтому не уверен, что это лучший подход. 10.07.2016@driver.element(text: 'Change delivery setting').hover
не работает. Я получаю исключение, которое не может найти элемент». Единственное изменение, которое я заметил при наведении курсора на меню, — это изменение элемента DIV. Смотрите мой пост до и после. Спасибо. 11.07.2016@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