selenium+java 元素有时存在 有时不存在,怎么处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium+java 元素有时存在 有时不存在,怎么处理相关的知识,希望对你有一定的参考价值。

参考技术A 1. selenium中如果去寻找元素,而元素不存在的话,通常会抛出NoSuchElementException 导致测试失败,但有时候,我们需要去确保页面元素不存在,才是我们正确的验收条件下面的方法可以用来判定页面元素是否存在

1 public boolean doesWebElementExist(WebDriver driver, By selector)
2
3
4 try
5
6 driver.findElement(selector);
7 return true;
8
9 catch (NoSuchElementException e)
10
11 return false;
12
13

2.一般有这样的应用场合,例如我们要验证在一个网站是否登录成功,那么可以通过判断登录之后是否显示相应元素:
WebElement linkUsername = driver.findElement(By.xpath("//a[contains(text(),"+username+")]"));
return linkUsername.isDisplayed();

这一方法的前提是:该元素之前已经存在,仅仅需要判断是否被显示。

现在存在另一种场合,页面元素并不存在,即通过driver.findElement只能在超时之后得到NoSuchElementException的异常。

因此只好通过如下方法解决:

1 boolean ElementExist (By Locator )
2
3   try
4   
5     driver.findElement( Locator );
6     return true;
7   
8   catch(org.openqa.selenium.NoSuchElementException ex)
9   
10    return false;
11   
12

但这一方法仍然不理想,有这样两个问题:
1、这一方法不属于任何一个page页,因此需要额外进行框架上的变更以支持这些功能函数,否则就必须在每一个用到该函数的page类写一遍。
2、仍然需要等到超时才能得知结果,当需要频繁使用该函数的时候会造成相当的时间浪费。

3.
类似于seleniumRC中的isTextPresent 方法
用xpath匹配所有元素(//*[contains(.,'keyword')]),判断是否存在包含期望关键字的元素。
使用时可以根据需要调整参数和返回值。

4. Xpath 多重判断

1 while(currentPageLinkNumber<MaxPage)
2
3   WebElement PageLink;
4   PageLink = driver.findElement(By.xpath("//a[@class = 'PageLink' and @title ='"+Integer.toString(currentPageLinkNumber+1)+"']"));
5   PageLink.click();
6   currentPageLinkNumber++;
7 //OtherOperation();
8

望采纳,谢谢。本回答被提问者采纳

以上是关于selenium+java 元素有时存在 有时不存在,怎么处理的主要内容,如果未能解决你的问题,请参考以下文章

Selenium WebDriver Java - 如何执行“如果存在,则单击,否则跳过”?

selenium 元素click失效

python selenium webscraping“NoSuchElementException”无法识别

Python Selenium 一个隐藏的框架,有时与 java 脚本断言一起出现

java selenium (十四) 处理Iframe 中的元素

WebDriver Selenium API:Element明显存在时出现ElementNotFoundErrorException!