Как выбрать Selenium Web Element, когда класс меняется в зависимости от выпадающего списка - PullRequest
0 голосов
/ 03 мая 2019

У меня есть выпадающий выбор, класс изменяется в зависимости от движения мыши по выпадающим значениям (активное значение) F12 HTML screenshot with the UI

Я попробовал приведенный ниже код, и он работал для «Индивидуального» * ​​1006 *

driver.findElement(By.cssSelector("div[class=ui-menu-item-wrapper]")).click();

Если вы видите скриншот, класс 'ui-menu-item-wrapper' одинаков как для физических лиц, так и для корпораций.

Вопрос: Я не уверен, как выбрать человека или корпорацию, используя cssSelector. Я хочу дать Индивидуальный или Корпорация из потока данных Excel.

Ответы [ 5 ]

1 голос
/ 03 мая 2019

Если по какой-то причине нет необходимости использовать селектор CSS, а идентификатор элементов не является динамическим и остается неизменным, вы можете найти элементы по идентификатору.Или вы можете найти элементы по тексту, используя XPath.

Вот несколько способов найти второй элемент списка.

ID

driver.findElement(By.id("ui-id-194")).click();

XPath

//Finds the element by text
String text = "Corporation";
driver.findElement(By.xpath("//li[@class='ui-menu-item']/div[contains(text(),'"+ text +"')]")).click();

Выбор CSS

//Finds the second div with the same class
driver.findElement(By.cssSelector("div[class=ui-menu-item-wrapper]:nth-of-type(2)")).click();

Кроме того, вы можете использовать селектор CSS или xpath, чтобы получить элемент, используя его идентификатор, как показано в ответе Валги.

1 голос
/ 03 мая 2019

Используйте WebDriverWait для обработки динамического элемента и после Xapth нажмите на элемент. Надеюсь, этот код будет работать для вас.

String text="corporation";
WebDriverWait wait=new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='ui-menu-item-wrapper' and text()='" + text + "']"))).click();
1 голос
/ 03 мая 2019

Здесь вы можете выбрать, используя xpath.

Xpath:

//ul[starts-with(@class,'ui-menu') and @role='combobox']//div[normalize-space(.)='" + valueFromExcel +"']

// ul [начинается с (@ class, 'ui-menu') и @ role = 'combobox'] // div [normalize-space (.) = 'Individual']

Использование xpath в этом случае простое и прямое, так как вы планируете использовать текст для идентификации элемента, который не поддерживается CSS.

Тем не менее, если вы хотите придерживаться CSS, вы должны получить каждый элемент текста, используя css, а затем выбрать nth элемент, если текст соответствует.

0 голосов
/ 03 мая 2019

Попробуйте это

Использование идентификатора корпорации DIV

driver.findElement(By.cssSelector("[id='ui-id-194']")).click();

или используйте findelements, чтобы получить список элементов, содержащихся в их классе "ui-menu-item-wrapper", затем щелкните второй элемент списка (0 - первый элемент, 1 - второй, в данном случае, корпорация.)

driver.findElements(By.cssSelector("div[class*=ui-menu-item-wrapper]")).get(1).click();

Вы также можете сделать это, чтобы щелкнуть по элементу списка, который содержит определенный текст:

for (WebElement x : driver.findElements(By.cssSelector("div[class*=ui-menu-item-wrapper]"))){
    if (x.getText().equals("StringValueYouWantHere")){
        x.click();
        break;
    }
}

Надеюсь, это поможет.

0 голосов
/ 03 мая 2019

Вы можете найти соответствующие элементы с помощью селектора, который находит префикс "ui-menu-item-wrapper":

driver.findElements(By.cssSelector("div[class^=ui-menu-item-wrapper]"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...