附加了HTML
代码,我不想使用硬代码xpath
,要求是将其设为通用代码:
<td bgcolor="#FFFFFF">
<input name="hotel_name_0" id="hotel_name_0" type="text" value="Hotel Creek" class="select_text" onfocus="disable_ctrlV()" onkeypress="return Nothingonly(event)">
</td>
代码:
public static boolean fncVerifyTextInColumn(WebElement gridObjWebElement,
String stringToValidate, int columnNumber,String colName) {
boolean flagTextinColumn=false;
ArrayList<WebElement> objRows;
ArrayList<WebElement> objCols;
ArrayList<WebElement> childElement;
objRows=(ArrayList<WebElement>)gridObjWebElement.findElements(By.tagName("tr"));
objCols=(ArrayList<WebElement>)objRows.get(0).findElements(By.tagName("td"));
if(objCols.get(columnNumber).getText().equalsIgnoreCase(colName)){
for(int index=1;index<objRows.size();index++){
objCols=(ArrayList<WebElement>)objRows.get(index).findElements(By.tagName("td"));
childElement=(ArrayList<WebElement>)objCols.get(columnNumber).findElements(By.xpath("//input"));
System.out.println(childElement.get(0).getAttribute("value"));
if(stringToValidate.trim().equalsIgnoreCase(childElement.get(0).getAttribute("value").trim())){
flagTextinColumn=true;
}
}
}
return flagTextinColumn;
}
方法调用:
fncVerifyTextInColumn(objGrid,hotels,1,"Hotel Name");
答案 0 :(得分:2)
我会使用cssSelector [id^='hotel_name_']
来定位元素,然后getAttribute()
检索属性值
By css = By.cssSelector("[id^='hotel_name_']");
WebElement myDynamicElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(css));
System.out.println(myDynamicElement.getAttribute("value"));
请注意此处regex
cssSelector
搜索^
。使用hotel_name_someNumber
我正在跳过任何动态数字。希望这是页面上{{1}}唯一的元素。
答案 1 :(得分:0)
只做
String attValue = driver.findElement(byAnyMethod).getAttribute("AttributeName");
希望有所帮助
答案 2 :(得分:0)
我认为你在寻找的是这个。 (我假设你知道如何编码,你只需要一个大方向,所以我将省略特定的代码。)
首先,找到td所在的表。您可能需要为此使用xPath,或者您需要为表分配ID,以便找到它。
然后,一旦你有了表,就做一个FindElements来获取它下面的TR列表。
一旦你有了TR,你可以循环遍历它们,抓住它下面的TD并在你想要的INPUT索引处获取TD,得到INPUT然后得到它的值。
是的,很多步骤。
快捷方式可能是使用唯一类对您想要值的所有输入进行分类,并通过className执行FindElements并循环遍历该列表。