I have been using
WebElement strecord = driver.findElement(By.name("Ui_u123));
Value can only be located using "By.name"
Field is now dynamic but the first 3 characters are always "Ui_u"
How can i find it now , "By.name" contains ....?
I have been using
WebElement strecord = driver.findElement(By.name("Ui_u123));
Value can only be located using "By.name"
Field is now dynamic but the first 3 characters are always "Ui_u"
How can i find it now , "By.name" contains ....?
You can try this xpath:
//*[starts-with(@name,'Ui_u')]
Though this is xpath. I am not sure about starts-with with Name attribute.
It might match with more than one element. In that case you will have to use findElements()
Code :
List<WebElement> strecord = driver.findElements(By.xpath("//*[starts-with(@name,'Ui_u')]"));
As a addition to @HellPine answers. You can write css selector as :
tagName[name^='Ui_u']
Why don´t you try the CSS way [name*='Ui_u'] ?
Note the *= means contains and you can use [] for any tag on element.
Regards,
Answering straight, No, you can't use contains in conjunction with By.name.
As per the Locator Strategies when you use driver.findElement(By.name("Ui_u123)); the internal Java Client implementation:
case "name":
toReturn.put("using", "css selector");
toReturn.put("value", "*[name='" + value + "']");
break;
converts the locator strategy:
driver.findElement(By.name("Ui_u123));
to:
driver.findElement(By.cssSelector("[name='Ui_u123']));
You can find a detailed discussion in Official locator strategies for the webdriver
Now, if you forcefully try to use the keyword contains, it would raise InvalidSelectorException as follows:
org.openqa.selenium.InvalidSelectorException: invalid selector: Unable to locate an element with the xpath expression
If you want to implement an approach similar to contains you can use either of the following solutions:
^ : To indicate an attribute value starts with
WebElement strecord = driver.findElement(By.cssSelector("[name^='Ui_u']));
$ : To indicate an attribute value ends with (not applicable in your case as the attribute starts with Ui_u )
WebElement strecord = driver.findElement(By.cssSelector("[name$='123']));
* : To indicate an attribute value contains
WebElement strecord = driver.findElement(By.cssSelector("[name*='Ui_u']));
You can find a detailed discussion in How to get selectors with dynamic part inside using Selenium with Python?