我有一个简单的HTML表,仅包含tr/td。我需要返回准确的表行,准确的记录的表列号。解决方案应该能够处理任何数量的行/列。我使用:
webdriver.find_element_by_xpath("//*[contains(text(), '8')]")
现在我需要返回它的位置,到目前为止,我一直在寻找属性,如value_of_css_property
/getCssValue
等。我是新硒,任何帮助将不胜感激。
如果您需要定位包含特定文本的td
元素的行:
element = webdriver.find_element_by_xpath("//tr[contains(td, '8')]")
或者,如果需要定位特定的单元格(td
元素):
element = webdriver.find_element_by_xpath("//td[contains(., '8')]")
然后,你可以得到location
:
print(element.location)
这将给你页面上元素的坐标。
如果需要获取包含所需文本的单元格的行号和列号:
table = webdriver.find_element_by_id("mytable")
rows = table.find_elements_by_tag_name("tr")
for row_index, row in enumerate(rows, start=1):
cells = row.find_elements_by_tag_name("td")
for column_index, cell in enumerate(cells, start=1):
if "8" in cell.text:
print("Found a match!")
print(row_index, column_index)
break
我知道这个任务,这是你的解决方案
class ElementNotFoundInTable(Exception):
pass
def find_number(table_content, number):
"""
returns position of element in the table,
indexes start from 0
:param table_content: a content of tbody element
:param str number: a number to look for in the table
:return:
"""
table_content = table_content.strip("<trd/>")
table_rows = table_content.split("</td></tr><tr><td>")
for table_row in table_rows:
if number in table_row:
row_idx = table_rows.index(table_row)
column_idx = table_row.split("</td><td>").index(number)
return row_idx, column_idx
raise ElementNotFoundInTable("Element '{0}' is not found in the table".format(number))
tbody = self.driver.find_element_by_css_selector("table tbody")
tbody_src = tbody.get_attribute("innerHTML")
find_number(tbody_src, '8')
您可以使用以下命令获取页面的高度或宽度位置
WebElement needed = webdriver.find_element_by_xpath("//*[contains(text(), '8')]"); //this puts it in a callable element for you
needed.getLocation().getY(); //this will give the height on the page
needed.getLocation().getX(); //this will give the width on the page
但实际上你并没有得到xpath。您最好找到要遍历的表,并按照这些行执行操作。
List<WebElement> tableRows = webDriver.findElements(By.xpath("tbody[1]/tr"))
for (WebElement singleRow: tableRows)/*gets the table rows in a List*/
{
List<WebElement> cells = singleRow.findElements(By.xpath("td"))
for (WebElement singleCell: cells)/*gets the rows cells in a List*/
{
trIteratorForRowCount++
if (singleCell.getText().contains('8'))
{
tdIteratorForCellCount++
print (("Total cell is (%s, %s) " % (trIteratorForCellCount, tdIteratorForCellCount))
}
}
}