使用 Watir 访问 Google 网上论坛成员页面中的表格单元格值



我希望访问网页中的表数据,该网页似乎比我看到的其他方法更难访问。 我担心某些 HTML 对 Watir 可见,因为如果您将页面另存为 HTML 文件,则不包括表格及其数据。

情况如下:Google 网上论坛有一个成员列表(当您以群组管理员身份查看设置时)。 我想查找(或迭代)表格,希望匹配电子邮件地址。 找到后,我会选择启用"操作"菜单的行(复选框)。 从操作菜单中,我会将交付设置更新为"无电子邮件"。

我附上了成员页面的屏幕截图以及HTML的片段。

请发布特定于 Google 网上论坛表格的建议/答案。 我已经尝试了 6+ 其他方法,这些方法适用于更简单的 HTML 页面,但不适用于 Google 网上论坛。

谢谢

网页 (图像)

这是我尝试访问的菜单的屏幕截图。动作弹出菜单(图像)

单击"操作"菜单按钮以获取悬停菜单之前和之后。

以前

<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 = 'someone@else.com'
  @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 = 'someone@else.com'
  @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: 'someone@else.com').parent.parent.checkbox.click
end

这是一种非常常见的模式,如果我们有更好的方法来解决这个问题,那就太好了。尝试这样的事情:

[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

相关内容

  • 没有找到相关文章

最新更新