IF ELSE условие с Selenium (C #), когда элемент отсутствует - PullRequest
0 голосов
/ 30 мая 2018

Я использую Selenium с C # на платформе NUNit, и я пытаюсь поместить условный оператор, ищущий элемент (баннер, чтобы быть конкретным).У меня уже есть фрагмент кода, чтобы щелкнуть этот баннер и перейти к следующему этапу тестирования.

Теперь у меня возникло условие, если ЕСЛИ этого баннера нет, ТОГДА пользователю необходимо выполнить дополнительные действия, чтобы установить баннер и продолжить.

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

var banner = FindElement(By.Id("bannerId"));
IF ( checking if above element not present)
{ execute set of steps to set the banner }
ELSE 
{
WebDriverWait wait2 = new WebDriverWait(driver, TimeSpan.FromSeconds(40));
 wait2.Until(ExpectedConditions.ElementIsVisible(By.Id("bannerId")));

banner.Click();
Thread.Sleep(2000);
}

Я надеюсь, что смог объяснить свою проблему и буду благодарен за любую помощь.

Ответы [ 4 ]

0 голосов
/ 30 мая 2018

Используйте FindElements вместо этого, это предотвратит исключение, и вы можете проверить размер возвращенной коллекции, чтобы проверить, существует ли баннер

IList<IWebElement> elements = driver.FindElements(By.Id("bannerId")).ToList();
if(elements.Count == 0)
{
    do something
}
else 
{
    //do something with the banner at elements[0]
    wait2.Until(ExpectedConditions.ElementToBeClickable(elements[0])).Click();
}
0 голосов
/ 30 мая 2018

попробуйте этот код:

public bool IsElementVisible(IWebElement element)
{
    return element.Displayed && element.Enabled;
}

IF(IsElementVisible(banner) == false)
{ execute set of steps to set the banner }
0 голосов
/ 30 мая 2018

Я подтвердил ваш код.Я вижу некоторые ошибки.Пожалуйста, найдите предложения ниже:

  1. Строка вашего кода:

    var banner = FindElement (By.Id ("bannerId")); выбросит « NoSuchElementException » и оператор , если на следующей строке, не будет выполнен.Следовательно, самым простым вариантом будет использование try и catch, где вы находите элемент, и пропустите блок if .

Ваш фрагмент кода может быть:

 try   
{
var banner = FindElement(By.Id("bannerId"));
WebDriverWait wait2 = new WebDriverWait(driver, 
TimeSpan.FromSeconds(40));
wait2.Until(ExpectedConditions.ElementIsVisible(By.Id("bannerId")));
banner.Click();
Thread.Sleep(2000);
}
 catch (NoSuchElementException ex)
{
  //Give the appropriate message
}
Если вы хотите следовать подходу, который вы упомянули в своем коде, попробуйте фрагмент кода ниже.Вам нужно будет сохранить элементы в списке и проверить размер списка.Если размер списка не равен нулю, вы можете нажать на баннер, иначе отобразится соответствующее сообщение.

Второй фрагмент кода:

IList<IWebElement> banner = driver.FindElements(By.Id("bannerId"));
IF ( list size is zero)
 { execute set of steps to set the banner }
 ELSE 
{
 WebDriverWait wait2 = new WebDriverWait(driver, 
TimeSpan.FromSeconds(40));
wait2.Until(ExpectedConditions.ElementIsVisible(By.Id("bannerId")));
//Click on the first element of the list
}
0 голосов
/ 30 мая 2018

Вы можете использовать попытку и поймать,

try
{
    var banner = FindElement(By.Id("bannerId"));
    IF ( checking if above element not present)
    { execute set of steps to set the banner }
    ELSE 
    {
       WebDriverWait wait2 = new WebDriverWait(driver, TimeSpan.FromSeconds(40));
       wait2.Until(ExpectedConditions.ElementIsVisible(By.Id("bannerId")));

       banner.Click();
       Thread.Sleep(2000);
    }
}
catch(Exception ex)
{
    //check what will be the return message from ex.Message
    //and from here you could add a logic what would be your next step.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...