Selenium Webdriver - Java - Как установить флажок на основе продукта

114
8

Я хотел бы установить флажок на основе текста ссылки. На странице есть несколько флажков, поэтому, используя текст ссылки, я хотел бы найти значение флажка, чтобы я мог нажать на флажок

Примечание # Все значения динамически генерируются

Не могли бы вы помочь исправить код, включив эту логику. благодаря

   driver.get(new URI(driver.getCurrentUrl()).resolve("/admin/lms/tag").toString());
String tag_name = sheet1.getRow(j).getCell(0).getStringCellValue();
driver.findElement(By.linkText(tag_name)).click();
WaituntilElementpresent.isExist();
String tag_value = sheet1.getRow(j).getCell(1).getStringCellValue();
driver.findElement(By.cssSelector("a[href*='"+tag_value+"']")).click();
WaituntilElementpresent.isExist();
String product = sheet1.getRow(j).getCell(2).getStringCellValue();
WaituntilElementpresent.isExist();
driver.findElement(By.cssSelector("input[name='products[]'][value='11']")).click();

https://i.stack.imgur.com/mOBY2.png

спросил(а) 2021-01-19T09:40:09+03:00 2 месяца, 3 недели назад
1
Решение
61

Вы можете использовать xpath следующим образом:

//tr[.//*[text()='OPIOIDMORTEPID']]//input

это означает, что вы найдете td который имеет этот точный текст, и найдите input от него.
Если вы хотите использовать частичный текст, тогда:

//tr[.//*[contains(text(), 'MORTEPID')]]//input

ответил(а) 2021-01-19T09:40:09+03:00 2 месяца, 3 недели назад
44

Вы можете сделать это со следующей стратегией:

найти ссылку, используя текст ссылки получить родительский элемент tr оттуда найдите элемент input флажка нажмите на флажок

Это можно сделать следующим образом:

WebElement link = driver.findElement(By.linkText("OPIOIDMORTEPID"));
WebElement trElement = link.findElement(By.xpath("../.."));
WebElement checkboxElement = trElement.findElement(By.tagName("input"));

checkboxElement.click();

ответил(а) 2021-01-19T09:40:09+03:00 2 месяца, 3 недели назад
44

Проверь это:


Получите список флажков WebElements, которые имеют общий локатор, то есть общее имя класса или имя тега (этот WebElement должен иметь текст или быть родителем элемента, который имеет текст).

List<WebElement> checkBoxElements = webDriver.findElements(By.cssSelector("checkbox"));

Перейдите по списку и проверьте, есть ли у WebElement текст, который вы ищете. Если это так, щелкните по нему!

for (WebElement e : checkBoxElements) {
if (e.getText().contains("Something dynamic")) {
e.click();
}
}

Будьте счастливы, что это работает.

ответил(а) 2021-01-19T09:40:09+03:00 2 месяца, 3 недели назад
44

Я бы написал этот раздел как функцию, чтобы он был повторно использован.

public static void selectByProductName(String value)
{
driver.findElement(By.xpath("//tr[//a[text()='" + value + "']]/td/input")).click();
}

а затем назовите его

selectByProductName("OPIOIDMORTEID");

ответил(а) 2021-01-19T09:40:09+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема