Шаблон итератора в VB.NET (C# использовал бы урожай!) [дубликат]

Я объясню на моем примере

      //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 и, оставив его как есть, отправить имя элемента, который вы должны выбрать, должно работать нормально

13
задан Peter Mortensen 23 April 2013 в 21:23
поделиться

3 ответа

VB.NET не поддерживает создание пользовательских итераторов и таким образом не имеет никакого эквивалента ключевому слову урожая C#. Однако Вы могли бы хотеть посмотреть на статью KB, Как сделать Visual Basic.NET или класс Visual Basic 2005 года применимыми в операторе For Each для получения дополнительной информации.

2
ответ дан 2 December 2019 в 00:19
поделиться

Ключевое слово урожая C# вынуждает компилятор создать конечный автомат в фоновом режиме для поддержки его. VB.Net не имеет ключевого слова урожая. Но это действительно имеет конструкцию, которая позволила бы Вам создавать конечный автомат в функции: Статические функциональные участники.

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

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

1
ответ дан 2 December 2019 в 00:19
поделиться

Хм, похож на Вас, могло бы не повезти:

Я боролся с проблемой сегодня при преобразовании некоторого C# в VB.NET. C# имеет действительно прохладный "оператор" возврата урожая, который используется в блоке итератора для обеспечения значения объекту перечислителя. VB.NET не имеет ключевого слова "урожая". Так, существует несколько решений (ни один из которых не действительно чист) обойти это. Вы могли использовать оператор возврата для возвращения значения, если бы Вы - цикличное выполнение через и хотели бы повредить перечислитель и возвратить единственное значение. Однако, если требуется возвратить все перечисление, создать Список () дочернего типа и возвратить список. Так как Вы обычно используете это с IEnumerable, Список () будет работать хороший.

Это было записано год назад, не уверенный, если кто-либо придумал что-либо еще лучше с тех пор..


Править: это будет возможно в версии 11 VB.NET (тот после VS2010), поддержка итераторов планируется. Спецификация доступна здесь.

1
ответ дан 2 December 2019 в 00:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: