我正在创建一个脚本,其中涉及搜索记录,然后更新记录。在搜索屏幕上,用户可以选择查看高级搜索选项。切换显示或隐藏高级搜索是由一个按钮控制的。
<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路径。
有没有人对我能如何评估该字段是否出现而不使脚本失败(因为找不到该字段)提出了任何建议。
提前致谢
西蒙
我回答这个问题可能很晚,但是可能会帮助其他人寻找相同的东西。
我最近在使用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*/ } }
希望这可以帮助 :)