2016-07-09 2 views
0

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

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

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

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

Благодаря

HTML (img)

Вот скриншот меню я пытаюсь получить доступ. Actions popup menu (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-ххх" значение не согласуется между сеансами.

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

@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

EDIT: код ниже

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

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

[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 
+0

Когда я пытаюсь это: 'browser.span (текст: '[email protected]'). Parent.parent.checkbox.click' я получаю' "NameError: локальная переменная не определена или метод «браузер». Когда я меняю «браузер» на «@driver», я получаю «исключение» неспособным найти элемент, используя {: text -> «[email protected]»,: tag_name => «span»} ' – Ben

+0

Обновите свое сообщение своим кодом. Если вы используете Watir, вам нужно что-то вроде: 'browser = Watir :: Browser.new: chrome' – titusfortner

+0

Я добавил свой код к основному сообщению. У меня есть команда, которую вы заметили. Пока мой код работает до тех пор, пока не найдет таблицу или элементы в таблице. – Ben

Смежные вопросы