Как найти имя класса, начиная с определенного текста и заканчивая определенным текстом через Selenium и Java - PullRequest
0 голосов
/ 31 января 2019

Ниже находится элемент, и мне нужно найти имена классов, совпадающие с первым css- и заканчивающиеся widget, Как мне найти его в селене (Java)?

Попробовал с кодом ниже, но он не работал

List<WebElement> list1 = driver.findElements(By.xpath("//body[starts-with(@class, 'css-')]"));
List<WebElement> list2 = driver.findElements(By.xpath("//body[contains(@class, 'css-')]"));
List<WebElement> list3 = driver.findElements(By.xpath("//body[ends-with(@class, 'widget')]"));

Ответы [ 2 ]

0 голосов
/ 31 января 2019

@ ответ elworthy был в правильном направлении относительно CssSelector , который вы можете использовать, и в соответствии с вашими испытаниями кода должно работать следующее:

List<WebElement> list3 = driver.findElements(By.CssSelector("//body[class^='css-'][class$='widget']"));

Однако, если вы хотите построить xpath стоит упомянуть Selenium поддерживает xpath v1.0 и ends-with() является частью xpath v2.0 .Таким образом, эквивалент xpath будет:

List<WebElement> list1 = driver.findElements(By.xpath("//body[starts-with(@class, 'css-') and contains(@class, 'widget')]"));
0 голосов
/ 31 января 2019

Я использую селекторы CSS, чтобы найти любой элемент любого типа:

driver.findElements(By.CssSelector("[class^='css-'][class$='widget']"))

Где мы находим любой элемент, который имеет атрибут class, используя [], который начинаетсяс ^= и заканчивается $=

Чтобы найти div:

driver.findElements(By.CssSelector("div[class^='css-'][class$='widget']"))

...