code: public static By byAttribute(String attributeName, String attributeValue) {
      return By.cssSelector(String.format("[%s='%s']", attributeName, attributeValue));
    }
docs: Find elements having attribute with given value.
  
  Examples:
  {@code <div binding="fieldValue"></div>}
  Find element with attribute 'binding' EXACTLY containing text 'fieldValue' , use:
  byAttribute("binding", "fieldValue")
  
  For finding difficult/generated data attribute which contains some value:
  {@code <div binding="userName17fk5n6kc2Ds45F40d0fieldValue_promoLanding word"></div>}
  
  Find element with attribute 'binding' CONTAINING text 'fieldValue', use symbol '*' with attribute name:
  byAttribute("binding*", "fieldValue") it same as By.cssSelector("[binding*='fieldValue']")
  
  Find element whose attribute 'binding' BEGINS with 'userName', use symbol '^' with attribute name:
  byAttribute("binding^", "fieldValue")
  
  Find element whose attribute 'binding' ENDS with 'promoLanding', use symbol '$' with attribute name:
  byAttribute("binding$", "promoLanding")
  
  Find element whose attribute 'binding' CONTAINING WORD 'word':
  byAttribute("binding~", "word")
  
  Seems to work incorrectly if attribute name contains dash, for example: {@code <option data-mailServerId="123"></option>}
  
  @param attributeName name of attribute, should not be empty or null
  @param attributeValue value of attribute, should not contain both apostrophes and quotes
  @return standard selenium By cssSelector criteria