Selenium(Java)自动化测试两种元素存在判断逻辑结果不一致问题
问题分析与解决
嘿,一眼就揪出问题啦!你第二个版本的代码里藏着一个非常容易踩的小陷阱——把比较运算符==写成了赋值运算符=!
问题根源
当你写下这段代码时:
if (reviewButtonPresent = true) { // ... }
这不是在判断reviewButtonPresent是否等于true,而是在把true直接赋值给这个变量。更关键的是,这个赋值表达式的返回值就是true,所以不管页面上的元素是否真的存在,这个if条件都会成立,自然永远输出「'Write review button' exists!」。
而第一个版本的逻辑是正确的:通过findElements()的返回集合大小判断元素是否存在,i > 0是标准的比较逻辑,所以能正确反映实际情况。
修正后的代码
你有两种修正方式:
- 把赋值改成比较运算符
==:
boolean reviewButtonPresent = driver.findElements(By.xpath("//ul[@class='comments_advices']")).size() > 0; if (reviewButtonPresent == true) { System.out.println("'Write review button' exists!"); } else { System.out.println("'Write review button' does not exist :( "); }
- 更简洁的写法:直接用布尔变量本身作为判断条件(推荐这种,更易读也不容易出错):
boolean reviewButtonPresent = driver.findElements(By.xpath("//ul[@class='comments_advices']")).size() > 0; if (reviewButtonPresent) { System.out.println("'Write review button' exists!"); } else { System.out.println("'Write review button' does not exist :( "); }
这种赋值与比较混淆的错误在编程里太常见了,尤其是手滑的时候,以后遇到逻辑和预期不符的情况,先检查条件语句里的运算符准没错~
内容的提问来源于stack exchange,提问作者Anne Bailly
相关产品推荐
相关产品推荐

