Как идентифицировать тег выбора с помощью динамического идентификатора с помощью XPath, заканчивающегося через C # - PullRequest
0 голосов
/ 01 марта 2019

Я не могу получить правильный синтаксис XPath, чтобы найти этот элемент select, который имеет динамическое начало поля идентификатора, но заканчивается статическими данными.

<select name="" autocomplete="off" id="edlbpDesktopFfqp_B005WJQUJ4-predefinedQuantitiesDropdown" tabindex="-1" class="a-native-dropdown">
                        <option value="1" selected="">
                            1
                        </option>
                        <option value="2">
                            2
                        </option>
                        <option value="3">
                            3
                        </option>
                        <option value="4">
                            4
                        </option>
                </select>

Я безуспешно пробовал оба из них:

var dd = driver.FindElement(By.XPath("//*[ends-with(@id,'predefinedQuantitiesDropdown')]"));
dd.Click();

И

var dd = driver.FindElement(By.XPath("//*[contains(@id, 'predefinedQuantitiesDropdown')]"));
dd.Click();

Ваша помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Вы должны использовать Select класс, чтобы выбрать элемент из выпадающего списка. Вы можете попробовать любой из следующих методов. Надеюсь, это поможет.

import org.openqa.selenium.support.ui.Select;



 Select select=new Select(driver.findElement(By.xpath("//select[contains(@id ,'predefinedQuantitiesDropdown')]")));

   select.selectByVisibleText("1"); //text visible on drop down
   select.selectByValue("1");     //value attribute on option tag
   select.selectByIndex(1);       //Index 1,2....n
0 голосов
/ 01 марта 2019

ends-with Функция ограничения XPath является частью XPath v2.0 , но согласно текущей реализации Selenium поддерживает XPath v1.0 .

Подробное обсуждение можно найти в Как найти элемент на основе того, чем заканчивается его значение в Selenium?

Какэлемент является динамическим элементом для Click() на желаемом элементе, который вы должны вызвать WebDriverWait для требуемого ElementToBeClickable , и вы можете использовать любой из следующих Стратегий локатора как решения:

  • CssSelector:

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("select.a-native-dropdown[id$='predefinedQuantitiesDropdown']"))).Click();
    
  • XPath:

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//select[@class='a-native-dropdown' and contains(@id, 'predefinedQuantitiesDropdown')]"))).Click();
    

Примечание : Однако в соответствии с рекомендациями в качестве желаемого элемента является тег <select>, поэтому в идеале необходимо использовать класс SelectElement и это методы из OpenQA.Selenium.Support.UI пространства имен для выбора любой опции.

...