if语句(element.click或break)无效

3
我有一组<li>标签,我需要点击包含特定数字(比如4)的那一个。
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>

我的代码是:

int a = 4;
List<WebElement> allElements = driver.findElements(By.xpath("//div[@class='divClass']/ul[@class='ulClass']/li")); 
    for (WebElement element: allElements) {
        String bText = element.getText();
        int b = Integer.parseInt(bText);
        System.out.println(a + " ? " + b);
        if (a == b){
            element.click();
            break;
        }
    }

Eclipse的结果如下:
1 ? 4
2 ? 4
3 ? 4
4 ? 4
5 ? 4

我不明白 if 语句有什么问题(因为 element.click();break; 不起作用)... 请问有人可以帮忙吗?


这是实际的 Eclipse 输出还是您自己组合的输出作为您所看到的输出的示例?我之所以问,是因为我没有看到任何 if 语句有问题。您可以为每个项目提供一个 ID,并使用该 ID 的 getElement 而不是 xpath。 - Gavin
这是Eclipse的输出(以及真正的代码...我只修改了类名,但只要Eclipse打印出正确的数字,这里就不重要了)。我无法修改网站,它在www上。 - Darkkrad
4个回答

1

我认为你可以通过更改xpath表达式来实现

"//div[@class='divClass']/ul[@class='ulClass']/li[text()='4']"

获取带有所需值的li标签。

我修改了代码,如下所示: '代码' String xpathText = ""//div[@class='divClass']/ul[@class='ulClass']/li[text()='" + a + "']""; System.out.println(xpathText); WebElement number1 = driver.findElement(By.xpath(xpathText)); number1.click(); '代码' 报错信息为(xpathText打印出来的是正确的): Exception in thread "main" org.openqa.selenium.InvalidSelectorException: 给定的选择器“//div[@class='divClass']/ul[@class='ulClass']/li[text()='4']”无效或不会返回任何WebElement。 TypeError:无法将表达式转换为返回指定类型。 - Darkkrad

1
尝试以下代码:-
String value = driver.findElement(By.xpath("//div[@class='divClass']/ul[@class='ulClass']/li[4]")).getText();

希望它能帮到你 :)

1
    Actually the control is not going inside if loop, 

    use below approch

    String a = "4";
    List<WebElement> allElements = driver.findElements(By.xpath("//div[@class='divClass']/ul[@class='ulClass']/li")); 
        for (WebElement element: allElements) {
            String bText = element.getText();
            System.out.println(a + " ? " + bText );
            if (a.equals(bText)){
                element.click();
                break;
            }
        }



OR

Use javascript click instead of normal click....................... 

    String a = "4";
    List<WebElement> allElements = driver.findElements(By.xpath("//div[@class='divClass']/ul[@class='ulClass']/li"));`enter code here`
for(int i=0; i<allElements.size;i++)
{
if(a.equals(allElements.get(i).gettext(bText))
{
javascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("arguments[0].click();", allElements.get(i));
}   
}

代码可以运行,我在if循环内打印了值并且break也完美地起作用了,但是我仍然有一个问题,就是element.click()没有点击正确的数字,但这不是问题所在。我会深入研究网站代码,以了解为什么不能正常工作,因为使用此代码找到的元素应该是正确的。 非常感谢大家的帮助,非常感激! - Darkkrad
使用JavaScript点击代替普通点击....................... for(int i=0; i<allElements.size;i++) { if(a.equals(allElements.get(i).gettext(bText)) { javascriptExecutor jse = (JavascriptExecutor)driver; jse.executeScript("arguments[0].click();", allElements.get(i)); }
}
- Manjunatha.N

0

@Manjunatha.N 我不确定为什么控制流程没有进入if语句,但是我设法让它工作:

int a = 4;
List<WebElement> allElements = driver.findElements(By.xpath("//div[@class='divClass']/ul[@class='ulClass']/li")); 
    for (WebElement element: allElements) {
        String bText = element.getText();
        int b = Integer.parseInt(bText);
        if (a != b) {
            System.out.println(a + " = " + b + "? are not equal!");
        } else {
            System.out.println(a + " = " + b + "? are equal!");
            element.click();
            break;
        }
    }

现在 Eclipse 的输出如下:

1 = 4? are not equal!
2 = 4? are not equal!
3 = 4? are not equal!
4 = 4? are equal!

然后单击所需元素!!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接