blob: 87e05abbc0d47c11d4818fc29f1ae4b0749e9ddb [file] [log] [blame]
class By {
final String using;
final String value;
const By(this.using, this.value);
/// Returns an element whose ID attribute matches the search value.
const By.id(String id) : this('id', id);
/// Returns an element matching an XPath expression.
const By.xpath(String xpath) : this('xpath', xpath);
/// Returns an anchor element whose visible text matches the search value.
const By.linkText(String linkText) : this('link text', linkText);
/// Returns an anchor element whose visible text partially matches the search
/// value.
const By.partialLinkText(String partialLinkText)
: this('partial link text', partialLinkText);
/// Returns an element whose NAME attribute matches the search value.
const By.name(String name) : this('name', name);
/// Returns an element whose tag name matches the search value.
const By.tagName(String tagName) : this('tag name', tagName);
/// Returns an element whose class name contains the search value; compound
/// class names are not permitted
const By.className(String className) : this('class name', className);
/// Returns an element matching a CSS selector.
const By.cssSelector(String cssSelector) : this('css selector', cssSelector);
Map<String, String> toJson() => {'using': using, 'value': value};
@override
String toString() {
var constructor = using;
switch (using) {
case 'link text':
constructor = 'linkText';
break;
case 'partial link text':
constructor = 'partialLinkText';
break;
case 'tag name':
constructor = 'tagName';
break;
case 'class name':
constructor = 'className';
break;
case 'css selector':
constructor = 'cssSelector';
break;
}
return 'By.$constructor($value)';
}
@override
int get hashCode => using.hashCode * 3 + value.hashCode;
@override
bool operator ==(other) =>
other is By && other.using == using && other.value == value;
}