2016-07-09 9 views
0

게시 된 다른 방법보다 손쉽게 접근 할 수있는 것으로 보이는 웹 페이지의 테이블 데이터에 액세스하려고합니다. 나는 페이지를 HTML 파일로 저장하면 테이블과 그 데이터가 포함되지 않기 때문에 Watir이 볼 수있는 일부 HTML이 염려된다.Watir을 사용하여 Google 그룹 회원 페이지의 테이블 셀 값에 액세스

상황 : Google 그룹스에는 회원 목록이 있습니다 (그룹 관리자로 설정을 볼 때). 이메일 주소와 일치하는 표를 찾고 싶습니다 (또는 반복). 발견되면 행 (확인란)을 선택하면 '작업'메뉴가 활성화됩니다. 작업 메뉴에서 '이메일 없음'으로 게재 설정을 업데이트합니다.

회원 페이지의 캡쳐 화면과 HTML 스 니펫을 첨부했습니다.

Google 그룹스 테이블에 대한 제안/답변을 게시 해주십시오. 나는 단순한 HTML 페이지에서 작동하는 6 가지 이상의 다른 접근 방식을 시도했지만 Google 그룹스에서는 작동하지 않습니다.

감사

HTML (img)

는 여기에 액세스하려고하고 메뉴의 스크린 샷입니다.

'동작'메뉴 버튼을 클릭하기 전후에 호버링 메뉴가 표시됩니다.

<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">

<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">

하기 전에, "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 
+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