如何根据 table 中同一行中其他元素的文本值获取元素的文本?

How to get text of an element on the basis of other element's text value on the same row in the table?

我需要根据同一行中的其他元素 "SF Lead ID" 查找元素 "score" 的文本。

"SF Lead ID"可以是动态的。例如,我在这里使用硬编码值。

String sf_id = "00Q1l000003clVhEAI"; //this value is dynamic
String text= dvr.findElement(By.xpath("//*/tr/[contains(text(),'" + sf_id + "')]//*[@id='lead-score']")).getText();

请看上图的html结构。帮我更正 xpath。

目前抛出以下错误 -

org.openqa.selenium.InvalidSelectorException: invalid selector: Unable to locate an element with the xpath expression //*/tr/[contains(text(),'00Q1l000003cldHEAQ')]//*[@id='lead-score'] because of the following error:
SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//*/tr/[contains(text(),'00Q1l000003cldHEAQ')]//*[@id='lead-score']' is not a valid XPath expression.
  (Session info: chrome=76.0.3809.132)
  (Driver info: chromedriver=2.38.552518 (183d19265345f54ce39cbb94cf81ba5f15905011),platform=Mac OS X 10.12.6 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds
For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/invalid_selector_exception.html

要提取关于 SF Lead IDscore,您必须引入 WebDriverWait对于 visibilityOfElementLocated(),您可以使用以下任一项 :

  • 使用cssSelectorgetText()

    String sf_id = "00Q1l000003clVhEAI";
    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("tr[data-sf-lead-id='" + sf_id + "'] td#lead-score"))).getText());
    
  • 使用xpathgetAttribute()

    String sf_id = "00Q1l000003clVhEAI";
    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//tr[@data-sf-lead-id='" + sf_id + "']//td[@id='lead-score']"))).getAttribute("innerHTML"));