Отвечая прямо, Нет , вы не можете использовать contains
в сочетании с By.name
.
Explaination
Согласно Стратегиям локатора при использовании driver.findElement(By.name("Ui_u123));
внутреннего Java-клиента реализация:
case "name":
toReturn.put("using", "css selector");
toReturn.put("value", "*[name='" + value + "']");
break;
преобразует стратегию локатора:
driver.findElement(By.name("Ui_u123));
до:
driver.findElement(By.cssSelector("[name='Ui_u123']));
Подробное обсуждение можно найти в Официальные стратегии поиска для веб-драйвера
Теперь, если вы попытаетесь принудительно использовать ключевое слово contains
, оно увеличит InvalidSelectorException
следующим образом:
org.openqa.selenium.InvalidSelectorException: invalid selector: Unable to locate an element with the xpath expression
Если вы хотите реализовать подход, аналогичный contains
, вы можете использовать любое из следующих решений:
^
: для указания значения атрибута начинается с
WebElement strecord = driver.findElement(By.cssSelector("[name^='Ui_u']));
$
: для указания значения атрибута заканчивается (неприменимо в вашем случае, так как атрибут начинается с Ui_u
)
WebElement strecord = driver.findElement(By.cssSelector("[name$='123']));
*
: для указания значения атрибута содержит
WebElement strecord = driver.findElement(By.cssSelector("[name*='Ui_u']));
Подробное обсуждение можно найти в Как получить селекторы с динамической частью внутри, используя Selenium с Python?