【问题标题】:Ruby Selenium Web Driver: find xpath elements without throwing NoSuchElementExceptionRuby Selenium Web 驱动程序:查找 xpath 元素而不抛出 NoSuchElementException
【发布时间】:2017-10-16 02:48:45
【问题描述】:

我有一个下面的 html 正在尝试使用 ruby​​ selenium 网络驱动程序进行测试

<div class="container-fluid container-results">
    <div class="result-row" id="0">
        <ul>
            <li class="process-status-column upload-success-icon">
                <svg class="glyphicon-upload-green" viewBox="0 0 100 100">
                    <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#doc_upload"></use>
                </svg>
            </li>
            <li class="file-label-column"><span>validated.txt</span></li>
            <li class="client-company-column"><span>test-client</span></li>
            <li class="reference-column"><span>Ref001</span></li>
        </ul>
    </div>
    <div class="result-row" id="1">
        <ul>
            <li class="process-status-column upload-error-icon">
                <svg class="glyphicon-exclamation" viewBox="0 0 100 100">
                    <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#exclamation"></use>
                </svg>
            </li>
            <li class="file-label-column"><span>Error.txt</span>
                <div class="attachment-row">This invoice contains an error</div>
            </li>
            <li class="client-company-column"><span>test-client</span></li>
            <li class="reference-column"><span>Ref002</span></li>            
        </ul>
    </div>   
    <div class="result-row" id="2">
        <ul>
            <li class="process-status-column upload-pending-icon">
                <svg class="glyphicon-spin" viewBox="0 0 100 100">
                    <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#refresh"></use>
                </svg>
            </li>
            <li class="file-label-column"><span>Pending.txt</span></li>
            <li class="client-company-column"></li>
            <li class="reference-column"></li>            
        </ul>
    </div>
</div>

我试图找到ul 元素作为selectedLine 变量,它与输入参数unique_field_value 中的span 值匹配

selectedLine = nil
rows = driver.find_elements(:css => "div.container-fluid.container-results >div.result-row >ul")
rows.each do |row|
   element = row.find_element(:xpath => "./li/span[contains(., '#{unique_field_value.to_s.strip}')]")
  if(!element.nil?)
    selectedLine = row
  end
end

如果我将validated.txt 作为参数值unique_field_value 传递,但如果我传递Error.txtPending.txt,则上面的代码工作正常

no such element: Unable to locate element: {"method":"xpath","selector":"./li/span[contains(., 'Error.txt')]"} (org.openqa.selenium.NoSuchElementException)

我的代码试图在rows 的第一次迭代中找到与unique_field_value 参数匹配的span 元素,如果找不到则抛出异常,如何继续迭代@​​987654335@ 的所有元素不抛出 NoSuchElementException 异常

【问题讨论】:

  • 你能看看element = row.find_element(:xpath =&gt; '//*[text()="#{unique_field_value.to_s.strip}"]') 是否匹配某些元素吗?
  • 在风格上,我们不使用驼峰命名法来表示 Ruby 中的变量或方法。 ItIsAReadabilityThing,所以selectedLine 应该是selected_line

标签: ruby selenium xpath selenium-chromedriver


【解决方案1】:

用下面的代码让它工作

rows.each do |row|
    elements = row.find_elements(:xpath => "./li/span[contains(., '#{unique_field_value.to_s.strip}')]")
    if (elements.length > 0)
      selectedLine = row
    end
  end

【讨论】:

    【解决方案2】:

    试试:

    rows.each do |row|
      element = row.find_element(:xpath => "./li/span[contains(., '#{unique_field_value.to_s.strip.downcase}')]")
      if(!element.nil?)
        selectedLine = row
    end
    

    【讨论】:

      猜你喜欢
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      相关资源
      最近更新 更多