Почему я не могу иметь 2 ожидания друг за другом? - PullRequest
0 голосов
/ 25 октября 2019

Хорошо, поэтому я пытаюсь установить флажок, правильный путь xpath, как я пытался сделать это с WebDriverWait, используя Clickable.Click ();и т. д. Но это работает только тогда, когда я прокручиваю страницу вниз и она видна. Я нашел этот код прокрутки и клик, написанный на JavaScript вместе с селеном. Итак, в основном, если я хочу прокрутить и щелкнуть что-либо вне поля зрения, я просто использую

objCommon.ScrollInToViewAndClick(driver.FindElement(By.Xpath("YOUR Locator")));

Как я уже говорил, до того, как он щелкнет, если я наведу курсор мыши на флажок вниз по странице, используя следующий код:

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(driver.FindElement(By.Xpath("YOUR Locator"))).Click();

Но я хочу изменить свой метод прокрутки javascript / selenium scrollview и щелчок, чтобы включить этот клик, но он не позволит мне собрать 2 ожидания вместе. Может кто-то предложить, где я иду не так.

Ths scrollviewandclick метод ниже:

public void ScrollInToViewAndClick(IWebElement element)
        {
            IJavaScriptExecutor executor = (IJavaScriptExecutor)driver;
            executor.ExecuteScript("arguments[0].scrollIntoView(true);", element);

            WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
            var elementList = new List<IWebElement>
            {
                element
            };

            var readonlyCollection = new ReadOnlyCollection<IWebElement>(elementList);
            wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.VisibilityOfAllElementsLocatedBy(readonlyCollection));
            wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(element)).Click();

        }

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Вы вызываете .Click () для Wait.Until (). Вы должны использовать element.Click () после второго ожидания в худшем случае.

0 голосов
/ 25 октября 2019

Вы можете сделать два ожидания подряд без проблем, я не уверен, какую ошибку вы получаете. В связи с тем, что вам кажется, что вы новичок в Selenium, позвольте мне объяснить несколько вещей и внести некоторые предложения:

  1. Вы по какой-то причине конвертируете один WebElement в коллекцию? Предположительно, так что вы можете использовать VisibilityOfAllElementsLocatedBy()? Вам не нужно делать это, потому что существует единственная версия этого метода ожидания, ElementIsVisible().

  2. Вам не нужно ждать, пока элемент будет видим, а затемкликабельны. Чтобы элемент был кликабельным, он ДОЛЖЕН быть видимым, поэтому достаточно просто кликнуть по нему.

  3. Если вы попытаетесь прокрутить элемент до того, как он станет видимым, вы получите ошибку. Итак, подождите, пока элемент станет кликабельным (видимым), выделите его и затем щелкните по нему.

Помня об этих трех вещах, я переписал ваш код ниже.

public void ScrollInToViewAndClick(IWebElement element)
{
    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(element));
    ((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView(true);", element);
    element.Click();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...