一尘不染

Selenium Webdriver-在If语句中使用isDisplayed()不起作用

selenium

我正在创建一个脚本,其中涉及搜索记录,然后更新记录。在搜索屏幕上,用户可以选择查看高级搜索选项。切换显示或隐藏高级搜索是由一个按钮控制的。

<a title="Searches" href="javascript:expandFilters()"><img border="0" align="absmiddle" alt="Advanced" src="****MASKED URL****"></a>

显示或隐藏高级搜索时,搜索按钮的属性之间唯一的区别是img src:

隐藏高级搜索后,IMG src以“ /Styles/_Images/advanced_button.jpg”结尾;当可见高级搜索时,IMG src以“
/Styles/_Images/basic_button.png”结尾

当我打开页面时,有时会显示“高级”搜索选项,有时却没有。我要搜索的值显示在“高级”部分中,因此为了使脚本正常工作,我添加了IF语句。

<input type="text" value="" maxlength="30" size="30" name="guiSystemID">

IF语句查找需要在其中输入数据的字段,如果该字段不存在,则表明“高级”选项不可见,我需要单击按钮以展开搜索选项。

我创建了以下IF语句。

     if (!driver.findElement(By.name("guiSystemID")).isDisplayed()) {
         driver.findElement(By.cssSelector("img[alt='Advanced']")).click();
     }

当我运行脚本并展开“高级”搜索时,脚本将成功运行。但是,当我运行脚本并且未展开“高级”搜索时,脚本失败,建议我找不到对象“
guiSystemID”。令人沮丧的是,如果找不到它,那么我希望脚本继续执行,进入IF语句的True路径。

有没有人对我能如何评估该字段是否出现而不使脚本失败(因为找不到该字段)提出了任何建议。

提前致谢

西蒙


阅读 705

收藏
2020-06-26

共1个答案

一尘不染

我回答这个问题可能很晚,但是可能会帮助其他人寻找相同的东西。

我最近在使用isDisplayed()时遇到了类似的问题。我的代码是这样的

if(driver.findElement(By.xpath(noRecordId)).isDisplayed() )                                                                                                         
{         
  /**Do this*/     
}    
else    
{     
  /**Do this*/    
}

当存在isDisplayed试图查找的元素时,此代码可以很好地工作。但是当元素不存在时,它将继续寻找该元素,并因此引发异常“
NosuchElementFound”。因此,我无法测试其他部分。

我想出了一种处理此问题的方法(将{if,else}与try and catch块一起使用,这样说。

public void deleteSubVar() throws Exception  
{         
  try   
  {    
    if(driver.findElement(By.xpath(noRecordId)).isDisplayed() )     
    {      
      /**when the element is found do this*/     
    }    
  }      
  catch(Exception e)     
  {       
   /**include the else part here*/     
  }       
}

希望这可以帮助 :)

2020-06-26