代码之家  ›  专栏  ›  技术社区  ›  Cerin

从与Selenium中的模式匹配的所有元素中获取文本

  •  3
  • Cerin  · 技术社区  · 14 年前

    <td id="subject_23432423">content I want to read</td>
    

    如何使用Selenium RC(特别是Python绑定)从所有这些元素中读取内容?我已经浏览了所有的命令,虽然有很多选项可以找到单个元素,但是没有一个命令可以处理多个匹配项的列表。例如,我可以使用以下方法查找特定元素的内容:

    content = sel.get_text("td[@id='subject_23432423']")
    

    4 回复  |  直到 14 年前
        1
  •  3
  •   Sergii Pozharov    14 年前

    使用Selenium 1 API是不可能的,但是可以调用JavaScript来使用XPath定位元素 //td[contains(@id, "subject_")] subject_ 总是出现在生成的id中。我不确定Selenium browserbot是否为IE提供了XPath支持,所以您可以将我限制在具有本机支持的浏览器上。在Firefox中,它将是:

    var tds = document.evaluate("//td[contains(@id, \"subject_\")]", document, null,
            XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); 
    for ( var i = 0; i < tds.snapshotLength; i++) {
       var td = tds.snapshotItem(i);
       // get text using td.textContent and add it to array or whatever...
       // and return it
    }
    
    return ...
    

    您需要在代码中将此脚本声明为字符串,并通过selenium.getEval执行

    但是如果你能切换到 Selenium 2 (WebDriver) findElementsBy 传递XPath //td[包含(@id,“subject_u”)]

        2
  •  5
  •   AutomatedTester    14 年前

    我要做的是下列技巧之一

    count = sel.get_xpath_count("xpath=//td[starts-with(@id,'subject_')]")
    someArray = []
    for i in count:
      someArray[i] = sel.get_text("xpath=//td[starts-with(@id,'subject_')][" + i + "]")
    

    BeautifulSoup lxml

    html = sel.get_html_source()
    from BeautifulSoup import BeautifulSoup
    soup = BeautifulSoup(html)
    #use beautifulsoup to do what you want
    
        3
  •  1
  •   edA-qa mort-ora-y    14 年前

    当然,这在Selenium中是可能的,因为这类东西在TestPlan中运行良好(它使用Selenium和HTMLUnit作为后端)。在这种情况下,简单的TestPlan脚本可能如下所示。

    for %Element% in (response //td[starts-with(@id,'subject_')])
      Notice %Element%
    end
    

    在编写通知时会自动调用到字符串的转换,但要存储在数组中也同样容易。

        4
  •  0
  •   user3487861    11 年前

    硒2

    我们可以查一下

    List subjects=driver.findElements(按.xpath(“//td[contains(@id,'subject'])”) int size=subjects.size();