【发布时间】:2021-08-21 18:27:34
【问题描述】:
【问题讨论】:
标签: selenium automation pytest qa
【问题讨论】:
标签: selenium automation pytest qa
有几种方法可以实现它:
//div[contains(@class,'TableBody')]//div[contains(@class,'RowInfo')]//div[count(//div[text()='Phone']/preceding-sibling::*) + 1]
为了让你不那么害怕,这里有一个细分:
count(//div[text()='Here_goes_column_name']/preceding-sibling::*) + 1
//div[contains(@class,'TableBody')]//div[contains(@class,'RowInfo')]//div[<XPath_from_previous_step>]
DATE_COLUMN_INDEX = 1
CARRIR_NAME_COLUMN_INDEX = 2
PHONE_COLUMN_INDEX = 3
...
然后在你的代码中使用它,像这样:
base_xpath = "//*[contains(@class,'TableBody')]//*[contains(@class,'RowInfo')][{}]"
dates = driver.find_elements_by_xpath(base_xpath.format(DATE_COLUMN_INDEX))
结论:使用后一种方法将帮助您的测试减少对潜在 UI 更改的依赖,并且不会用非常大的 XPath 污染您的代码库。最后,让您的测试更稳定,更不易出错。
【讨论】:
试试这个:
carrier_names = driver.find_elements_by_xpath('//div[contains(@class,'TableBody')]//div[contains(@class,'fcuTEs')]')
如果这不起作用,试试这个:
carrier_names = driver.find_elements_by_xpath('(//div[contains(@class,'TableBody')]//div[contains(@class,'RowInfo')])[2]')
不要忘记在此之前添加一些延迟/等待以让页面完全加载
【讨论】: