Как найти элемент с использованием Relative Xpath для сценария RadioButton в пределах http://jqueryui.com - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь автоматизировать сценарий RadioButton в Selenium через веб-сайт - http://jqueryui.com/checkboxradio/

Я пытался использовать xpath от CssSelector, настроил xpath, но у меня ничего не получалось.Наконец-то мне пришлось использовать абсолютный xpath (но не лучший метод), чтобы код работал.

public class CheckBoxAndRadioButtons {

    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.chrome.driver" , "C:/Users/User/Desktop/Selenium Drivers/chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("http://jqueryui.com/checkboxradio/");
        driver.manage().window().maximize();

        driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@class='demo-frame']")));
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        WebElement radiobox = driver.findElement(By.xpath("/html/body/div/fieldset[1]/label[1]/span[1]"));
        boolean isDisplayedstatus = radiobox.isDisplayed();
        System.out.println(isDisplayedstatus);
        boolean isEnabledstatus = radiobox.isEnabled();
        System.out.println(isEnabledstatus);
        boolean isSelectedstatus = radiobox.isSelected();
        System.out.println(isSelectedstatus);

        Thread.sleep(2000);
        List<WebElement> ele = driver.findElements(By.xpath("//input[@type ='radio']"));
        for(WebElement we:ele) {
            if(!we.isSelected()) {
                we.click();
            }
        }

    }
}

Ответы [ 5 ]

2 голосов
/ 12 марта 2019

Если я правильно интерпретирую вашу проблему о том, что вы не хотите использовать полный xPath, я обнаружил, что следующее идентифицирует тот же радиоэлемент, который вы захватили:

"//fieldset[1]/label[1]/span[1]"

Затем, чтобы найти последующийфлажки (два после «Нью-Йорк»), вы можете использовать

"//fieldset[1]/label[2]/span[1]"

и

"//fieldset[1]/label[3]/span[1]"
2 голосов
/ 12 марта 2019

Радиокнопка - это элемент input с типом radio , с которым легко взаимодействовать.Для этого вы можете использовать id radio-1.

. Если вы хотите найти переключатель по тексту метки, например, «Нью-Йорк», вы можете использовать xpath ниже:

//label[normalize-space(.)='New York']/following-sibling::input[@type='radio'][1]

Код будетбыть:

WebElement radioButton = driver.findElement(By.xpath("//label[normalize-space(.)='New York']/following-sibling::input[@type='radio'][1]");
boolean isDisplayed = radioButton.isDisplayed();
System.out.println(isDisplayed);
boolean isEnabled = radioButton.isEnabled();
System.out.println(isEnabled);
boolean isSelected = radioButton.isSelected();
System.out.println(isSelected);

Вы также можете использовать элемент label для выбора с помощью //label[normalize-space(.)='New York'], но isSelected() не будет работать, и вам придется проверить наличие класса ui-state-active css:

// Using label
WebElement radioButton = driver.findElement(By.xpath("//label[normalize-space(.)='New York']"));

// Select radio by clicking on label
radioButton.click();

// Check if radio selected by css class of the label
boolean selected = radioButton.getAttribute("class").contains("ui-state-active");
1 голос
/ 12 марта 2019

Чтобы щелкнуть радиокнопку рядом с текстом Нью-Йорк , вам нужно вызвать WebDriverWait для elementToBeClickable(), и вы можете использовать следующее решение:

  • Блок кода:

    package demo;
    
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.chrome.ChromeOptions;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    public class Q55111127_Chaitanya_Maligi {
    
        public static void main(String[] args) {
    
            System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
            ChromeOptions options = new ChromeOptions();
            options.addArguments("start-maximized");
            options.addArguments("--disable-extensions"); 
            WebDriver driver = new ChromeDriver(options);
            driver.get("http://jqueryui.com/checkboxradio/");
            new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.xpath("//iframe[@class='demo-frame']")));
            new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='widget']//fieldset//label[@for='radio-1']"))).click();
            System.out.println("Clicking of CheckBox Completed");
        }
    }
    
  • Вывод на консоль:

    Clicking of CheckBox Completed
    
  • БраузерСнимок:

radio_button_jQuery

1 голос
/ 12 марта 2019

Попробуйте этот код ниже. Я думаю, что щелчок webdriver не работает. Так что я использовал javascript executor, чтобы нажать на элемент.

WebElement radiobox = driver.findElement(By.xpath("//input[@id='radio-1']"));
        boolean isDisplayedstatus = radiobox.isDisplayed();
        System.out.println(isDisplayedstatus);
        boolean isEnabledstatus = radiobox.isEnabled();
        System.out.println(isEnabledstatus);
        boolean isSelectedstatus = radiobox.isSelected();
        System.out.println(isSelectedstatus);

        List<WebElement> ele = driver.findElements(By.xpath("//input[starts-with(@id, 'radio')]"));
        for(WebElement we:ele) {
            if(!we.isSelected()) {
                JavascriptExecutor executor = (JavascriptExecutor) driver;
                executor.executeScript("arguments[0].click();",we);
                System.out.println("Clicked : " + we.getAttribute("id"));
               // we.click();
            }
        }

Вывод:

true
true
false
Clicked : radio-1
Clicked : radio-2
Clicked : radio-3
1 голос
/ 12 марта 2019

Если вы пытаетесь выбрать радиокнопку New York, вы можете использовать следующий xpath.

//label[contains(@class,'ui-checkboxradio-radio-label') and text()='New York']
...