Я объясню на моем примере
//In Page Object File
public static WebElement idProof(WebDriver driver)
{
WebElement element=null;
WebDriverWait wait=new WebDriverWait(driver, 50);
element=wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='panel-body']//div[3]//div[2]//div[1]//a[1]//span[1]")));
return element;
}
` `//In Test File
WebElement idProof = Page1.idProof(driver);
idProof.click();
//In Test File
WebElement voterId = FarmerRegPage.idProofVoterId(driver, "Voter id");
voterId.click();
// In Page Object File
public static WebElement idProofVoterId(WebDriver driver, String idVal)
{
WebElement element=null;
WebDriverWait wait=new WebDriverWait(driver, 50);
element=wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//li[contains(text(),'" + idVal +"')]")));
return element;
}
Переменная String idVal
- это значение, которое я передаю при раскрытии
Фрагмент HTML: - <span>Select an Option</span>
У нас такая же ситуация, и я хотел бы сказать вам, что вы должны сначала щелкнуть в раскрывающемся списке, а затем просто изменить xpath span
на li
и, оставив его как есть, отправить имя элемента, который вы должны выбрать, должно работать нормально
VB.NET не поддерживает создание пользовательских итераторов и таким образом не имеет никакого эквивалента ключевому слову урожая C#. Однако Вы могли бы хотеть посмотреть на статью KB, Как сделать Visual Basic.NET или класс Visual Basic 2005 года применимыми в операторе For Each для получения дополнительной информации.
Ключевое слово урожая C# вынуждает компилятор создать конечный автомат в фоновом режиме для поддержки его. VB.Net не имеет ключевого слова урожая. Но это действительно имеет конструкцию, которая позволила бы Вам создавать конечный автомат в функции: Статические функциональные участники.
Должно быть возможно подражать эффектам функции возврата урожая путем создания универсального класса, который реализует IEnumerable, а также необходимый конечный автомат и размещение экземпляра как статический участник в функции.
Это, конечно, потребовало бы реализации класса за пределами функции. Но, если сделано правильно класс должен быть допускающим повторное использование в общем случае. Я не играл с идеей достаточно для предоставления любой подробной информации реализации, все же.
Хм, похож на Вас, могло бы не повезти:
Я боролся с проблемой сегодня при преобразовании некоторого C# в VB.NET. C# имеет действительно прохладный "оператор" возврата урожая, который используется в блоке итератора для обеспечения значения объекту перечислителя. VB.NET не имеет ключевого слова "урожая". Так, существует несколько решений (ни один из которых не действительно чист) обойти это. Вы могли использовать оператор возврата для возвращения значения, если бы Вы - цикличное выполнение через и хотели бы повредить перечислитель и возвратить единственное значение. Однако, если требуется возвратить все перечисление, создать Список () дочернего типа и возвратить список. Так как Вы обычно используете это с IEnumerable, Список () будет работать хороший.
Это было записано год назад, не уверенный, если кто-либо придумал что-либо еще лучше с тех пор..
Править: это будет возможно в версии 11 VB.NET (тот после VS2010), поддержка итераторов планируется. Спецификация доступна здесь.