Javascript “一种方法”;试一试;如果某个元素不存在,则单击该元素不会失败(触发并忽略)

Javascript “一种方法”;试一试;如果某个元素不存在,则单击该元素不会失败(触发并忽略),javascript,selenium,selenium-ide,Javascript,Selenium,Selenium Ide,我需要一种方法来尝试单击一个元素,但是如果它不在那里,测试应该不会失败。 有点像是“开火然后忘记”的点击 我想直接在Selenese(或js,如user extensions.js)中这样做,而不是在PHPUnit/JUnit中 我想到了一个“用户扩展”功能来实现这一点,所以我搜索了,但没有找到任何有用的东西 更新:我自己的第一次尝试:(不起作用) 关于如何使其工作,有什么想法吗?可能是您可以在DefaultSelenium中为click(String)方法创建一个包装器 public void

我需要一种方法来尝试单击一个元素,但是如果它不在那里,测试应该不会失败。 有点像是“开火然后忘记”的点击

我想直接在Selenese(或js,如user extensions.js)中这样做,而不是在PHPUnit/JUnit中

我想到了一个“用户扩展”功能来实现这一点,所以我搜索了,但没有找到任何有用的东西

更新:我自己的第一次尝试:(不起作用)


关于如何使其工作,有什么想法吗?

可能是您可以在
DefaultSelenium
中为
click(String)
方法创建一个包装器

public void clickWithoutFail(String locator){
    try{
        selenium.click(locator);
    }catch(SeleniumException ex){

    }
}
上述包装方法可能会解决您的问题。它将忽略在单击不存在的元素时发生的任何错误

通过使用
isVisible()
方法检查定位器的存在,可以避免
try/catch
阻塞

希望这有帮助。

我用“storeEval()”和纯js实现了这一点。 要么我得到了一个有效的链接,要么我返回了一个必须的元素“fake klick”,这样sel就不会抛出任何错误。
这是一种黑客行为,但我的网站上有“未定义”的内容,因此我需要一种方法来处理这些可能性。

我建议不要进行这种测试。最好每次测试都做完全相同的事情,否则会使调试更加困难。如果您遇到由于AJAX等原因导致元素不存在的问题,最好问一个单独的问题。您的代码不是js(我在user extension.js中需要它),但我会尝试在js中这样做。
public void clickWithoutFail(String locator){
    try{
        selenium.click(locator);
    }catch(SeleniumException ex){

    }
}