我有问题。我需要从组合框中获取一个项目,其中填充了数据库中的项目,并且没有它们的ID,所以也许有人遇到过这个问题并且可以帮助我:))
大家好,我现在正在尝试这段代码(对不起,我真的很糟糕:/)
boolean text1 = Boolean.valueOf("//*[contains(text(), 'textA')]");
boolean text2 = Boolean.valueOf("//*[contains(text(), 'textA')]");
int i = 0;
do {
if (text1 != true){
waitForElement(By.xpath("//div[@onclick='meXpatht()']")).click(); //going to next
//combobox page
} else if (text2 == true){
waitForElement(By.xpath("//*[contains(text(), 'textA')]")).click(); //selecting
//combo item
} else {
//not done yet, here will be creation of new reccord
}
i++;
}
while (i <= 1000);
所以有我的代码,我试图通过文字找到我需要的元素,当我找不到时,我会进入下一个组合框页面。
该代码存在问题,我加载它时,我现在有一个无限循环。当我找到需要的文本时,我无法弄清楚如何停止循环。
任何想法如何修复此代码?或者我在这里做错了什么?
我认为当我找到一个元素时,我将能够使用break;
停止循环,但它没有奏效。现在我在想,也许这是因为我在组合框中寻找文字?
答案 0 :(得分:2)
有多种方法可以选择WebElement
个对象,而不仅仅是挂在他们的ID上。
您可以查看HERE的各种方式,但我建议您专门查看 CSS Selector ,您可以在您的情况下使用它来从最近的元素遍历DOM例如,一个ID。
我链接的文档中的CSS选择器示例:
WebElement cheese = driver.findElement(By.cssSelector("#food span.dairy.aged"));
如果您比使用XP更熟悉XPath,也可以使用XPath选择器。
示例:强>
List<WebElement> inputs = driver.findElements(By.xpath("//input"));
由于您似乎正在处理select
元素,因此您也可以使用以下内容:
WebElement select = driver.findElement(By.tagName("select"));
List<WebElement> allOptions = select.findElements(By.tagName("option"));
for (WebElement option : allOptions) {
if("yourDesiredValue".equals(option.getAttribute("value"))){
option.click();
}
}
其中"yourDesiredValue"
是表示您要选择的String
标记的值属性的option
。