【问题标题】:Watir Webdriver <script> Element exists?Watir Webdriver <script> 元素是否存在?
【发布时间】:2013-01-12 04:42:01
【问题描述】:

我试图在页面加载后确定是否可以使用 Watir WebDriver 定位脚本中的文本。我正在使用 Watir-WebDriver 来自动化我们的测试工作。我无法弄清楚如何定位元素并验证值。有什么帮助吗?

<script><!--
...
     s.events="event9"
...
//--></script>

所以,我想我想知道是否可以使用 watir webdriver 在 HTML 脚本中搜索文本?

提前谢谢你。

更新:以下是脚本。

require "rubygems"
require "watir-webdriver"
require "watir-webdriver-performance"
require "rspec"
require "headless"

include Watir
require 'logger'

#path store file: script, data file, logs
path = File.dirname(__FILE__)

#create log file
name_log = 'TEST_0001_bsro_validation_suite'
file = File.open(path + '/logs/' + name_log + '_logFile.log', File::WRONLY | File::APPEND | File::CREAT)
logger = Logger.new(file)
logger.info("=> TEST: 0004_bsro_validation")

#open internet browser
browser = Watir::Browser.new :ff

#go to rebrand website with login info.  this may need to be removed.
test_site = 'http://*****:*****@fcac-rebrand.laughlin.com/'
browser.goto(test_site)
load_secs = browser.performance.summary[:response_time]
logger.info("=> Page Load Time: #{load_secs}")

zipcode_input = browser.text_field(:id => 'universal-selectorZip')


# select year; progressive selection
year_select = browser.select_list(:id => 'universal-year')
browser.select_list(:id => 'universal-year', :disabled => 'disabled').wait_while_present

if year_select.exists?
  year_select.select '2010'
else
  logger.info("=> ERROR: Year Select Not Available")
end

# select make; progressive selection
make_select = browser.select_list(:id => 'universal-make')
browser.select_list(:id => 'universal-make', :disabled => 'disabled').wait_while_present

if make_select.exists?
  make_select.select 'Volkswagen'
else
  logger.info("=> ERROR: Make Select Not Available")
end

# select model; progressive selection
model_select = browser.select_list(:id => 'universal-model')
browser.select_list(:id => 'universal-model', :disabled => 'disabled').wait_while_present

if model_select.exists?
  model_select.select 'Jetta'
else
  logger.info("=> ERROR: Model Select Not Available")
end

# select submodel; progressive selection
submodel_select = browser.select_list(:id => 'universal-submodel')
browser.select_list(:id => 'universal-submodel', :disabled => 'disabled').wait_while_present

if submodel_select.exists?
  submodel_select.select '2.0T TDI Sedan'
else
  logger.info("=> ERROR: Submodel Select Not Available")
end

# input zip code; progressive selection

if zipcode_input.exists?
  zipcode_input.set '53202'
else
  logger.info("=> ERROR: ZIP Code Select Not Available")
end

browser.button(:id => 'universal-submit-tires-quote').click

browser.script.html.include? "event49"

browser.close

我应该补充一点,在这种情况下,事件是 event49 而不是 9。谢谢!

【问题讨论】:

    标签: webdriver watir watir-webdriver locate


    【解决方案1】:

    Zeljko 的方法是正确的。但是,如果/当页面上有多个脚本并且您想要的不是第一个时,它会失败。

    如果有多个脚本元素,您将不得不遍历它们以查看其中一个脚本是否具有值。

    browser.scripts.any?{ |s| s.html.include? "event9" }
    #=> true
    

    【讨论】:

    • 感谢贾斯汀的帮助。我收到以下错误:在缓存中找不到元素 - 页面可能在查找后已更改(Selenium::WebDriver::Error::StaleElementReferenceError)。不确定这是否与解决方案有关。
    • 你能用你的整个脚本和一个重现问题的页面来更新你的问题吗?
    • 在原始帖子中更新。 URL 在带有用户名和密码的脚本中。谢谢!
    • 异常只是偶尔发生,这让我相信这是一个时间问题,watir 在完成加载之前与页面交互。除了捕获异常并重试之外,我不确定如何确定此页面是否已完成加载。
    • 谢谢!我将单独发布以解决 DOM 计时问题。
    【解决方案2】:

    应该这样做:

    browser.script.html.include? "event9"
    #=> true 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 2011-09-25
      • 1970-01-01
      相关资源
      最近更新 更多