Arc*_*cv2 6 javascript selenium try-catch selenium-webdriver
所以我使用的是Selenium的JavaScript实现,WebDriverJS.与任何Web浏览器自动化一样,最大的障碍是让代码减慢足够长的时间以加载页面元素.我的解决方案是:
对于我想与之交互的每个元素,我都有这样的代码块
xpath = "//div[@id='gs_lc0']/input[@id='gbqfq']"
driver.wait(function(){
return waitForElement(xPath,driver);
});
try{
element = driver.findElement(webdriver.By.xpath(xPath));
}catch(e){
console.log("Wait Function False Positive")
}
element.sendKeys("Let Me Google That For You\n";
Run Code Online (Sandbox Code Playgroud)
用这个函数在wait函数中重复
var waitForElement = function(path, driver){
console.log("try: " + path)
try{
driver.findElement(webdriver.By.xpath(path));
}catch (e){
console.log("FAILURE")
return false;
}
console.log("SUCCESS")
return true;
}
Run Code Online (Sandbox Code Playgroud)
现在这个代码有时会起作用,但是它不会起作用.我觉得等待功能完全不起作用,我只是获得了幸运的网页加载时间.因此,为了测试这个理论,我将try函数添加到代码块中,甚至无法捕获"NoSuchElementError".所以我的问题首当其冲的是,是否有其他方法来形成tryCatch函数,以便捕获这些错误.
如果想要完整再现,我的代码头部也是如此
var webdriver = require('selenium-webdriver'), element
var driver = new webdriver.Builder().
withCapabilities(webdriver.Capabilities.chrome()).
build();
driver.get('google.com');
Run Code Online (Sandbox Code Playgroud)
Lou*_*uis 13
百吉饼制造商的使用建议findElements并不错.这通常是我想要检查一个元素是否存在而不是混乱异常的情况.
但是,为了完整起见,以下是如何处理元素不存在时生成的错误:
var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder().
withCapabilities(webdriver.Capabilities.chrome()).
build();
driver.get('http://www.google.com');
driver.findElement(webdriver.By.id("fofofo")).then(null, function (err) {
if (err.name === "NoSuchElementError")
console.log("Element was missing!");
});
driver.quit();
Run Code Online (Sandbox Code Playgroud)
第二个参数then是一个errback,如果findElement失败则调用它.因为selenium-webdriver使用promises操作,所以这是你必须捕获错误的方法.使用try...catch无法工作,因为Selenium没有立即开始工作; 你要求Selenium做的工作将findElement在未来的某个不确定的时间进行.到那个时候,JavaScript的执行已经移出你的try...catch.
上面的代码搜索id值为的元素,该元素fofofo不存在且失败.
| 归档时间: |
|
| 查看次数: |
11700 次 |
| 最近记录: |