如何检查硒中是否存在元素?
我试过了:
browser.driver.findElements(by.id('my-id'))
但它似乎不起作用。
答案 0 :(得分:5)
browser.driver.isElementPresent(by.id('my-id'))
element(by.id('my-id')).isPresent()
答案 1 :(得分:1)
问题是寻找不存在的元素会引发异常。你使用findElements是正确的轨道,因为如果它找不到元素就不会抛出错误,你所遇到的问题是留下一个列表,其中包含找到但未进行比较的列表,以确保至少有1个列表中的元素(例如,它找到了一个元素)
public boolean exists(By by){
return !driver.findElements(by).isEmpty();
}
是一个函数,如果存在则返回true,否则返回false。从这种方法中可以清楚地看出如何修改它以满足您的需要。
答案 2 :(得分:1)
webdriver.js示例
在此示例中,我等待一个模态存在,因为它的模态逐渐消失
请参阅以下内容: const didModalFadeInExist =等待this.driver.executeScript('返回document.getElementsByClassName(“模式淡入”)');
您可以将这一行代码置于等待中,以等待元素数组> = 1
这样,您可以在检查等待内容之后知道它存在。
我们还可以同时检查不透明度。
元素数组> = 1且opacity ='1'之后。然后退出等待并继续测试
async waitForModalFadeIn() {
try {
let isVisible;
let opacityReturned;
let isModalFadeInFound;
const dialog = await this.driver.wait(until.elementLocated(this.baseselector.MODAL_FADE_IN));
await this.driver.wait(async () => {
const doesModalFadeInExist = await this.driver.executeScript('return document.getElementsByClassName("modal fade in")');
isModalFadeInFound = doesModalFadeInExist;
const bool = await this.isDisplayed(this.baseselector.MODAL_FADE_IN);
isVisible = bool;
const opacity = await dialog.getCssValue('opacity');
opacityReturned = opacity;
return isVisible === true && isModalFadeInFound.length > 0 && opacity === '1';
}, 4000);
return opacityReturned === '1' && isVisible === true && isModalFadeInFound.length > 0;
} catch (err) {
console.log(`Function waitForModalFadeIn: Failed to open modal${err}`);
return null;
}
}
示例测试
it('Trigger "unmetered" modals in the technical spec section', async () => {
await wHost.visit(page = '/web-hosting');
const table = await driver.wait(until.elementLocated(wHost.selector.COMPETITOR_TABLE), this.pageLoadTimeOut);
await driver.executeScript('arguments[0].scrollIntoView()', table);
const modals = await table.findElements(wHost.selector.UNLIMITED_MODAL);
for (let i = 0; i < modals.length; i++) {
await modals[i].click();
assert.isTrue(await common.waitForModalFadeIn());
assert.isTrue(await common.closeModal());
}
});
答案 3 :(得分:1)
这就是您要寻找的,该函数将id作为参数, 如果找到该元素,它将返回状态为true的json对象以及您要查找的元素。
async function ElementExistsID(element){
return new Promise(async (resolve)=>{
try{
let ElementResult=await driver.findElement(webdriver.By.id(element));
resolve({"element":ElementResult,"status":true});
}
catch(error){
log.warn(error);
resolve({"status":false});
}
})
}
您可以像这样使用它
let ElementIamLookingFor=await ElementExistsID(IDOfTheElement);
if(ElementIamLookingFor.status){
console.log("Element exists");
}
else{
throw new Error("Element not found");
}
答案 4 :(得分:0)
经过多次尝试,以下内容对我有用:
function doIfPresent(elementId, doIfPresent, next) {
var elem = by.id(elementId);
browser.driver.isElementPresent(elem).then(function (present){
if (present) {
doIfPresent(element(elem));
}
next();
});
}
例如
doIfPresent('my-button', function(element){ element.click();}, function(){
// your code continues here
});
我不知道为什么我们需要在这里使用期货。