Похоже, что есть метод ExpectedCondition.Or() в селене для других языков, но я не смог найти его в DotNetSeleniumExtras.WaitHelpers для. NET
ExpectedCondition.Or()
DotNetSeleniumExtras.WaitHelpers
Есть ли способ проверить, существует ли один из двух элементов используя Selenium с. NET?
Есть несколько способов сделать это.
Вставьте «ИЛИ» в свой локатор. Пример с CSS селекторами является добавление , в локатор. Если вы хотите найти элемент с идентификатором element1 или идентификатором element2, то вы можете использовать селектор CSS #element1, #element2. В XPath есть оператор OR, если вы тоже этого хотите. См. this в качестве одного примера.
,
element1
element2
#element1, #element2
Вы можете написать свое собственное пользовательское условие, которое принимает массив локаторов (на случай, если вы хотите искать больше двух). .
public Func<IWebDriver, IWebElement> AnyElementExists(By[] locators) { return (driver) => { foreach (By locator in locators) { IReadOnlyCollection<IWebElement> e = _driver.FindElements(locator); if (e.Any()) { return e.ElementAt(0); } } return null; }; }
и затем назовите его как
By[] locators = { By.Id("element1"), By.Id("element2") }; IWebElement foundElement = new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(AnyElementExists(locators));
, а затем foundElement - первый найденный элемент, который соответствует вашим локаторам. Может быть несколько совпадений, но это будет первое. Вы можете изменить метод, чтобы сделать все, что вы хотите или добавить больше, и т. Д. c. в зависимости от вашего сценария.
foundElement
Вы можете использовать пользовательское условие
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); wait.Until<bool>((d) => { return d.FindElements(firstBy).Count > 0 || d.FindElements(secondBy).Count > 0; });