编辑:
public bool getImage() { IWebElement table = driver.FindElement(By.Id("DIV_ID_1")); string name = String.Format("//*[contains(text(), \'{0}\')]", 'TEST1'); IWebElement element = table.FindElement(By.XPath(name)); IWebElement parent = element.FindElement(By.XPath("..")); try { IWebElement image = element.FindElement(By.XPath("//img")); } catch (NoSuchElementException e) { return false; } return true; }
我怎么知道TEST1是否有Image?在下面的html源代码中,我有tr,而在tr内我有td,有些tr可能有图片标签,有些可能没有
TEST1
Image
因此,我将传递一个示例名称:TEST1在返回中,我将期待该名称是否具有Image标签。
再次,如果我通过TEST2和TEST3它应该return null,因为它不具有图像标记及其所在的TEST1和TEST4确实有Image tag,因此它应该返回我真实的。
TEST2
TEST3
return
null
TEST4
Image tag
我尝试了类似的方法,但是没有用:
string name = String.Format(".//td[contains(., \'{0}\')]/..//@src", "TEST1"); IWebElement element = driver.FindElement(By.XPath(name));
得到这个错误:尝试上面的代码后…
xpath表达式’.// td [contains(。,’TEST1’)] /..//@ src’无法求值或不会在WebElement中产生
以下是html源代码
<div id="DIV_ID_1"> <table id="TBLID1"> <tr> <td> TEST1 </td> <td> <img id="ctl00" src="../App_Themes/Default/images/phone.gif" /> </td> </tr> <tr> <td> TEST2 </td> </tr> <tr> <td> TEST3 </td> </tr> <tr> <td> TEST4 </td> <td> <img id="ctl02" src="../App_Themes/Default/images/phone.gif" /> </td> </tr> </table> </div>
因此,我将其分解为几个步骤。
首先获取您的元素:
WebElement element = driver.findElement(By.xpath("//*[contains(text(), 'TEST1')]"));
然后获取父元素:
WebElement parent = element.findElement(By.xpath(".."));
然后检查父元素是否有<img>标签:
<img>
Try { WebElement image = parent.findElement(By.xpath("//img")); } catch (NoSuchElementException e) { System.out.println("Did not find an image"); }
我将其包装在一个函数中,然后可以传递文本以查找图像并返回元素(如果存在)。
就像是:
public WebElement getImage(String innerText)
然后只需传递TEST1或TEST2