Selenium:在XPath中循环

时间:2018-08-08 07:58:11

标签: selenium selenium-webdriver xpath webdriver

我正在尝试将元素循环到Selenium中,但是它不起作用。 特别是,我需要按以下方式进行y更改:row0, row1, row2,等等...

for i in range(0, int(nr)):
    y='row'+ "(nr)"
    elems = browser.find_element_by_xpath("//tr[contains(@class, y]").text
    browser.find_element_by_class_name('nxt').click()

我已经找到了一个解决方案,但是它并不是很可靠,没有放入"contains"的情况下,我就加入"starts-with"来查找所有以row开头的元素:

elems = browser.find_elements_by_xpath("//tr[starts-with(@class, 'row')]")

1 个答案:

答案 0 :(得分:1)

根据您的问题和代码试验,推测变量 nr 的类型为string

因此,当您将 nr 转换为int类型时,接下来要将其附加到其他样式row时,必须将其转换回{{1} }。

  • 示例代码:

    string
  • 控制台输出:

    nr="5"
    for i in range(0, int(nr)):
        y='row'+str(i)
        print(y)
    
  • 现在,您可以轻松地在 xpath 中使用变量row0 row1 row2 row3 row4

最后,在没有相关的 HTML 的情况下,很难猜测属性 y的形成。但是,最佳用法如下:

  • class:如果starts-with()属性开头包含 text row0 ,请使用starts-with()

    • 示例:

      class
    • 实现:

      class="row0MCat"
      
  • elems = browser.find_element_by_xpath("//tr[starts-with(@class='%s')]" %(y)).text :如果contains()属性在中间或中间包含 text row0 ,则使用contains()。结束。

    • 示例:

      class
    • 实现:

      class="Mrow0Cat", class="MCatrow0"