Java 如何循环浏览WebElement列表并选择一个具有条件的WebElement?
我将SeleniumWebDriver与Java一起使用。我正在尝试创建一个方法,该方法在WebElements列表中循环,以返回第一个包含文本“Ooga Booga”的WebElement,如果列表中没有包含此文本的元素,则返回nullJava 如何循环浏览WebElement列表并选择一个具有条件的WebElement?,java,selenium-webdriver,Java,Selenium Webdriver,我将SeleniumWebDriver与Java一起使用。我正在尝试创建一个方法,该方法在WebElements列表中循环,以返回第一个包含文本“Ooga Booga”的WebElement,如果列表中没有包含此文本的元素,则返回null public class myClass { private static WebElement element = null; private static List<WebElement> elements = null; public
public class myClass {
private static WebElement element = null;
private static List<WebElement> elements = null;
public static WebElement returnOneElement (WebDriver driver){
elements = driver.findElements(By.cssSelector("someSelector"));
for (WebElement element : elements){
String myText = element.findElement(By.cssSelector("classC")).getText();
if (myText.contains("Ooga Booga")) {
return element;
}
}
return null;
}
如何在忽略列表中没有“someDiv”的元素的情况下继续循环列表
<div class="someSelector">
<div class="classA">
<div class="classB">
</div>
<div class="someSelector">
<div class="classA">
<div class="classB">
<div class="classC">
</div>
我需要在div“classC”中搜索文本。使用findElement-S方法,如下所示
for (WebElement element : elements) {
List<WebElement> mightHaveSomeDiv = element.findElements(By.cssSelector("someDiv"));
if (mightHaveSomeDiv.size() > 0) {
//Can iterate the list if you expect more than one div of type someDiv.
String myText = mightHaveSomeDiv.get(0).getText();
if (myText.contains("Ooga Booga")) {
return element;
}
}
}
for(WebElement:elements){
List可能有someDiv=element.findElements(By.cssSelector(“someDiv”);
if(可能有somediv.size()>0){
//如果需要多个someDiv类型的div,则可以迭代列表。
字符串myText=mightHaveSomeDiv.get(0.getText();
if(myText.contains(“Ooga Booga”)){
返回元素;
}
}
}
使用findElement-S方法,如下所示
for (WebElement element : elements) {
List<WebElement> mightHaveSomeDiv = element.findElements(By.cssSelector("someDiv"));
if (mightHaveSomeDiv.size() > 0) {
//Can iterate the list if you expect more than one div of type someDiv.
String myText = mightHaveSomeDiv.get(0).getText();
if (myText.contains("Ooga Booga")) {
return element;
}
}
}
for(WebElement:elements){
List可能有someDiv=element.findElements(By.cssSelector(“someDiv”);
if(可能有somediv.size()>0){
//如果需要多个someDiv类型的div,则可以迭代列表。
字符串myText=mightHaveSomeDiv.get(0.getText();
if(myText.contains(“Ooga Booga”)){
返回元素;
}
}
}
顺便说一句,我建议尝试摆脱这样的静态方法。它会使你的生活成为一个活地狱,因为它是静态的。使用它的一切都开始需要静态
不管怎样,让我们把它分解一下。此cssSelector允许您通过标记名而不是类名获取子div
By.cssSelector(".someSelector div")
现在我们有了WebElement的列表,它们都是div元素,让我们只查找div中的文本。不必担心class属性
public static WebElement returnOneElement (WebDriver driver){
elements = driver.findElements(By.cssSelector(".someSelector div"));
for (WebElement element : elements){
if(element.getText().contains("Ooga Booga")) {
return element;
}
}
return null;
}
或者,您可以使用xpath定位器直接找到目标,例如
//div[@class='someSelector']//div[contains(.,'Ooga Booga')]
不过,请注意,如果您有多个包含文本“Ooga Booga”的div,您将获得多个WebElements,并且您接下来使用它所做的可能不是您所期望的。实际上,此警告也应适用于循环。它将从包含“Ooga Booga”的第一个div元素中分离出来。如果想要精确匹配,您必须调整逻辑。顺便说一句,我建议您尝试摆脱这种静态方法。它会使你的生活成为一个活地狱,因为它是静态的。使用它的一切都开始需要静态 不管怎样,让我们把它分解一下。此cssSelector允许您通过标记名而不是类名获取子div
By.cssSelector(".someSelector div")
现在我们有了WebElement的列表,它们都是div元素,让我们只查找div中的文本。不必担心class属性
public static WebElement returnOneElement (WebDriver driver){
elements = driver.findElements(By.cssSelector(".someSelector div"));
for (WebElement element : elements){
if(element.getText().contains("Ooga Booga")) {
return element;
}
}
return null;
}
或者,您可以使用xpath定位器直接找到目标,例如
//div[@class='someSelector']//div[contains(.,'Ooga Booga')]
不过,请注意,如果您有多个包含文本“Ooga Booga”的div,您将获得多个WebElements,并且您接下来使用它所做的可能不是您所期望的。实际上,此警告也应适用于循环。它将从包含“Ooga Booga”的第一个div元素中分离出来。如果想要精确匹配,您必须调整逻辑。这是您的答案。。首先声明父web定位器
WebElement element1 = driver.findElement(By.id("##abc##"));
现在,如果您想在上面定义的定位器内执行任何操作或任何事情,则可以按如下方式执行:
element1.findElement(By.xpath(" . //##yourFurtherLocABC")).click();
element1.findElement(By.xpath(" . //##yourFurtherLocXYZ")).getText();
重要=请记住在任何子元素的开头保留一个
这是你的答案。。首先声明父web定位器
WebElement element1 = driver.findElement(By.id("##abc##"));
现在,如果您想在上面定义的定位器内执行任何操作或任何事情,则可以按如下方式执行:
element1.findElement(By.xpath(" . //##yourFurtherLocABC")).click();
element1.findElement(By.xpath(" . //##yourFurtherLocXYZ")).getText();
重要=请记住在任何子元素的开头保留一个
什么是someDiv?这是标记名div还是其他css路径定位器?您提到了属性,所以我假设使用类名或某种类型。如果是这样,您可能可以使用不需要该类名的其他cssSelector。尝试通过元素标记名获取列表。您不必担心这样会丢失属性,因为这是另一个CSS路径定位器。。我想这个类比可能会有所帮助:我在一副牌中循环。我一直在看这些卡片,直到我找到一个红心之王。我正在搜索每一张卡片someSelector
,检查它是否是心脏someDiv
,然后检查它是否是KingmyText
。只要牌组中的每一张牌都是一颗心,这就行了。。但当我碰到黑桃的那一刻,这将抛出一个无触点的例外,因为它在牌中看不到一颗心。我正在寻找一种方法,例如isEmpty()
,但是只需要一个WebElement
。我们所做的只是猜测,我用htmlWhat is someDiv更新了这个问题?这是标记名div还是其他css路径定位器?您提到了属性,所以我假设使用类名或某种类型。如果是这样,您可能可以使用不需要该类名的其他cssSelector。尝试通过元素标记名获取列表。您不必担心这样会丢失属性,因为这是另一个CSS路径定位器。。我想这个类比可能会有所帮助:我在一副牌中循环。我一直在看这些卡片,直到我找到一个红心之王。我正在搜索每一张卡片someSelector
,检查它是否是心脏someDiv
,然后检查它是否是KingmyText
。只要牌组中的每一张牌都是一颗心,这就行了。。但当我碰到黑桃的那一刻,这将抛出一个无触点的例外,因为它在牌中看不到一颗心。我正在寻找一种方法,例如isEmpty()
但是f