2

我是 QA Automation,在 C#+Nunit+Webdriver 方面有 7 年以上的经验。现在我不得不切换到 CodeceptJS 并且找不到如何使用这个框架做一些常见的动作。请帮我解决下一个问题:

  1. 如何获取元素列表并获取此列表中特定元素的某些属性。在 C# 中,它将是这样的:

    var list = driver.FindElements(By.Xpath("*//xpath"));
    
  2. 如何检查元素是否在 customsteps 或 pageobject 中具有某些属性?

    module.exports = {
     MyElemThatIsNotAlwaysVisible_Likesubmenu: { id: "submenu" },
     MyElementThatIsAlwaysVisible_Likemuenu : {id: "menu"}
    
     function_click_onelement_that_notalwaysvisible () 
     {
       //here I want to check 
       if(MyElementThatIsAlwaysVisible.getattribute("class").contains("not-active"))
       {
          MyElementThatIsAlwaysVisible_Likemuenu.click();
          wait.until (MyElemThatIsNotAlwaysVisible_Likesubmenu.Displayed)
       }
       MyElemThatIsNotAlwaysVisible_Likesubmenu.Click();
     }
    }
    
4

3 回答 3

1
  1. 如果您想获取并使用列表做更多的事情,您可以使用:

await I.grabAttributeFrom('//img', 'src');

如果 xPath 匹配多个元素,则方法返回一个数组。文档参考在这里


  1. 如果您只需要验证属性是否存在,您可以使用:

    I.seeAttributesOnElements('//form', { method: "post"});

如文档中所述

于 2019-10-22T10:46:28.990 回答
0

找到答案:

1)添加 CustomHelper 并在其中添加功能

async GetListOfElements(locator) {
    let browser = this.helpers.WebDriver;
    let res = browser._locateFields(locator);
    return res;
  };

这将返回元素列表稍后如果您需要对特定项目做某事可以添加一个更多的辅助函数,如

  async Clicker(elem) {
    let browser = this.helpers.WebDriver.browser;
    await browser.elementClick(elem.elementId);
  };

通过这种方式,您可以使用 WebdriverIo API 中的任何方法 2)您可以添加异步函数,并在其中添加类似

  var attr = await I.grabAttributeFrom(this.MyElement, "class");
    if (attr.toString().includes("checked"))
      myaction();
于 2019-11-18T10:07:03.453 回答
0

我使用量角器制作了一个自定义助手,因为 codeceptjs 中的 getattrib 方法也从未对我有用,您可以编辑“textcontent”值以获取不同的属性。

  /**
   * Function to return the text content of all elements matching with the locator in an array
   * @param xpath object
   */
  async getElementsText(locator) {
    const driver = this.helpers.Protractor.browser;
    await driver.waitForAngular();
    // await console.log("Getting text for: " + locator.xpath);
    return driver.element.all(by.xpath(locator.xpath)).getAttribute("textContent");
  }
于 2019-12-03T18:55:26.760 回答